Struts2 sort Tag Example

In this tutorial, we will discuss about sort tag. The sort tag is used to sort a List using a java.util.Comparator. List and Comparator both passed in as the tag attribute.

First we create a JSP file named sorttag.jsp as follows.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <title>Sort Control Tag Struts2 | dineshonjava.com</title> 
 <head>

 <body>
  <h1><span style="background-color: #FFFFcc">Sort Tag Example! | dineshonjava.com
  </span></h1>
  <b>List without any sorting</b>
  <ol> 
   <s:iterator value="userList">
    <li>
     <s:property value="userId" /> ,
     <s:property value="userName" /> ,
     <s:property value="age" />
       </li>
   </s:iterator>
    </ol>
 <table> 
  <tr>
   <td bgcolor="#ffffcc"><b>The Values Sorted by Age.</b><br>
    <s:bean name="com.dineshonjava.struts2.utility.UserAgeComprator" var="userAgeC" />
    <s:sort comparator="#userAgeC" source="userList">
     <ol> 
      <s:iterator>
       <li>
        <s:property value="userId" /> ,
        <s:property value="userName" /> ,
        <s:property value="age" />
       </li>
      </s:iterator>
     </ol>
    </s:sort>
   </td>
  <td></td>

 <td bgcolor="pink"><b>The Values Sorted by Name.</b><br>
  <s:bean name="com.dineshonjava.struts2.utility.UserNameComprator" var="userNameC" />
  <s:sort comparator="#userNameC" source="userList">
   <ol> 
    <s:iterator>
     <li>
      <s:property value="userId" /> ,
      <s:property value="userName" /> ,
      <s:property value="age" />
     </li>
    </s:iterator>
   </ol>
  </s:sort>
 </td>
  </tr> 
</table>
</body>
</html>

The Struts mapping file struts.xml is as follows-
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />
    <constant name="struts.custom.i18n.resources" value="myapp" />
 
    <package name="default" extends="struts-default" namespace="/">
        <action name="sorttag" class="com.dineshonjava.struts2.action.ControlTagAction">
            <result name="success">/sorttag.jsp</result>
        </action>
        
    </package>
 </struts>

Create action class
package com.dineshonjava.struts2.action;

import java.util.ArrayList;
import java.util.List;

import com.dineshonjava.struts2.domain.User;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @author Dinesh Rajput
 *
 */
public class ControlTagAction extends ActionSupport{

 private static final long serialVersionUID = 1L;
 
 private List<User> userList = new ArrayList<User>();
 
 public String execute() {
  
  User user1 = new User();
  user1.setAge(27);
  user1.setUserId(111);
  user1.setUserName("Dinesh Rajput");
  
  User user2 = new User();
  user2.setAge(25);
  user2.setUserId(222);
  user2.setUserName("Anamika Rajput");
  
  User user3 = new User();
  user3.setAge(23);
  user3.setUserId(333);
  user3.setUserName("Aadesh");
  
  User user4 = new User();
  user4.setAge(21);
  user4.setUserId(444);
  user4.setUserName("Vinesh Rajput");
  
  userList.add(user1);
  userList.add(user2);
  userList.add(user3);
  userList.add(user4);
  
  return SUCCESS;
 }

 public List<User> getUserList() {
  return userList;
 }


 public void setUserList(List<User> userList) {
  this.userList = userList;
 }
}

Comparator:
UserNameComprator.java
Create 2 Comparator classes, to sort the User’s "userName" and "age" property.
package com.dineshonjava.struts2.utility;

import java.util.Comparator;

import com.dineshonjava.struts2.domain.User;

/**
 * @author Dinesh Rajput
 *
 */
public class UserNameComprator implements Comparator<User> {

 @Override
 public int compare(User user1, User user2) {
  return user1.getUserName().compareTo(user2.getUserName());
 }

}

UserAgeComprator.java
package com.dineshonjava.struts2.utility;

import java.util.Comparator;

import com.dineshonjava.struts2.domain.User;

/**
 * @author Dinesh Rajput
 *
 */
public class UserAgeComprator implements Comparator<User> {

 @Override
 public int compare(User user1, User user2) {
  return user1.getAge()-user2.getAge();
 }

}


Create web.xml file as below.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Struts2ControlTags</display-name>
  <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Right click on the project name and click Export > WAR File to create a War file. Then deploy this WAR in the Tomcat's webapps directory. Finally, start Tomcat server and try to access

URL http://localhost:8080/doj/sorttag.

This will give you following screen: 



Download Source Code
Struts2SortTag.zip


<<Previous <<   || Index ||   >>Next >>




No comments:

Post a Comment