您的位置:首页 > 编程语言 > Java开发

关于struts2 sort标签的使用问题

2014-11-25 21:09 351 查看
关于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。按照名称进行排序(统一格式之后进行比较)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: