关于struts2 sort标签的使用问题

关于struts2 sort标签的使用问题              

近做项目的时候有一个需要根据某种规则对数据进行排序的模块,用到了struts2 sort标签,特此写下这篇文章帮助一些初学者。

             使用该标签需要进行以下几部(配置那些就不多说了),是对集合进行排序

             1,需要一个类实现Comparator接口.这个类用于制定排序规则:基本格式

                  (1)public class MyComparator implements Comparator<Object>  {

                    public int compare(Object o1, Object o2) { 
 
                        XmxxBean xmxxBean1 = (XmxxBean)o1 ;
                       XmxxBean xmxxBean2 = (XmxxBean)o2 ;
                      //没啥用
         //  xmxxBean1 = (XmxxBean)o2;
       //  xmxxBean2 = (XmxxBean)o1;
 
 //按id进行排序
//  return xmxxBean1.getXMXXID() - (xmxxBean2.getXMXXID()); 
 //按名称进行排序
 return xmxxBean2.getXMMC().compareToIgnoreCase(xmxxBean1.getXMMC());

           }
}

                  

但是需要注意的是这样完全不能满足我们开发的需求,有时候需要转换思想,所以讲两种实际情况

一.比如我想对满足arr1:1;arr2:1;arr3:1这三个属性1多的我排在前面0多的排在后面。那么规则就是A+B+C (想办法换成按id排序的方法进行排序)

          1.类 public class AgeComparator implements Comparator<XXX> {
           public int compare(XXX X1, XXX X2) {
  int x = X1.getArr1()+X1.getArr2()+X1.getArr3();
  int y = X2.getArr1()+X2.getArr2()+X2.getArr3();
return x-y; //按id排序
        }
                }

              2.list   action中得到回应到页面   

               private List<XXX> persons = new ArrayList<XXX>();
XXX p1 = new XXX(1, 1, 1);
XXX p2 = new XXX(1, 0, 0);
XXX p3 = new XXX(1, 1, 0);
XXX p4 = newXXX(1, 1, 1);
XXX p5 = newXXX(1, 1, 0);
XXX p6 = newXXX(0, 0, 0);
XXX p7 = newXXX(0, 0, 0);
XXX p8 = newXXX(1, 0, 0);
xxx.add(p1);
xxx.add(p2);
xxx.add(p3);
xxx.add(p4);
xxx.add(p5);
xxx.add(p6);
xxx.add(p7);
xxx.add(p8) ;

        3.public class  XXX{
private int arr1;
private int arr2;
private int arr3;  省略其他方法

        4.struts配置文件,跳转到sorgTag.jsp页面

        5.显示页面   sorgTag.jsp

               <s:bean name="xx.xx.xx.ageComparator " var="ageComparator" />找到刚才定义的排序规则类

              <s:sort comparator="#ageComparator" source="xxx">//source是需要排序的集合 comparator指向上面bean
              <ol>
             <s:iterator>
              <li><s:property value="arr1" />, 
              <s:property value="arr2" />, 
             <s:property value="arr3" />
             </li>
</s:iterator>
</ol>
</s:sort>
        

二.我想根据属性的字符串首字母(名称)排序只需这样:

public class FirstNameComparator implements Comparator<Person> {
public int compare(Person p1, Person p2) {
String firstName1 = p1.getFirstName().toUpperCase();
String firstName2 = p2.getFirstName().toUpperCase();
return firstName1.compareTo(firstName2);//关键(名称)
}
}

 (产生list.应用一般是从数据库查出来)一般在action中返回到页面

public class SortTagAction extends ActionSupport{

public String excute*(){

                比如Person p1 = new Person("C-First", "C-Last", 40);
Person p2 = new Person("A-First", "A-Last", 20);
Person p3 = new Person("B-First", "B-Last", 10);
Person p4 = new Person("F-First", "F-Last", 33);
Person p5 = new Person("E-First", "E-Last", 22);
Person p6 = new Person("D-First", "D-Last", 11);
persons.add(p1);
persons.add(p2);
persons.add(p3);
persons.add(p4);
persons.add(p5);
persons.add(p6);

                return "sorgTag"

}

配置文件;

<action name="sortTag" class="xxx.xxx.xxx.xxx.SortTagAction">
    <result name="sortTag">/taguser/sortTag.jsp</result>
   </action>

public class Person{

private String firstName;
private String lastName;
private int age;  省略其他方法

2.前台页面主要内容:(sortTag.jsp) 上面一种排序流程类似

<s:bean name="com.mkyong.common.FirstNameComparator " var="firstNameComparator" />找到刚才定义的排序规则类

<s:sort comparator="#firstNameComparator" source="persons">//source是需要排序的集合 comparator指向上面bean
<ol>
<s:iterator>
     <li><s:property value="firstName" />, 
         <s:property value="lastName" />, 
         <s:property value="age" />
     </li>
</s:iterator>
</ol>
</s:sort>

这样就完全了排序,

总结:任何排序规则都要想办法转成两种基本排序方法1,按照Id(一般适用于能转换成整数的,boolean的就转成整数)2。按照名称进行排序(统一格式之后进行比较)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值