Sort标签用一个定义好的Comparator来对List进行排序,排序后的列表被压入ValueStack中。如果定义了var=keyname,那么将在PageContext中添加一个keyname到排列后元素的映射,即可通过%{#attr.keyname}来获取排列后的列表,更多请看下文示例。
IF标签属性 | ||||
---|---|---|---|---|
属性名 | 必要属性 | 默认值 | 类型 | 描述 |
comparator | TRUE | java.util.Comparator | 一个比较对象,需实现java.util.Comparator接口。 | |
source | FALSE | String | 被排序的原列表。 | |
var | FALSE | String | 如果指定,则会在PageContext里放一排序后列表的映射,可以用%{#attr.varname}获取排序后的列表。 |
说明:省略奇葩属性performClearTagStateForTagPoolingServers
public class TestAction extends ActionSupport { private Comparator<Integer> myComparator; private List<Integer> myList; @Override public String execute() throws Exception { this.myComparator = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1-o2;//from 0 to n } }; this.myList = new ArrayList<Integer>(Arrays.asList(new Integer[]{5,1,2,3,4})); return super.execute(); } public Comparator<Integer> getMyComparator() { return myComparator; } public List<Integer> getMyList() { return myList; } }
<s:sort comparator="myComparator" source="myList"> <s:iterator> <s:property/> </s:iterator> </s:sort>
<s:sort var="result" comparator="myComparator" source="myList" ></s:sort> <s:iterator value="%{#attr.result}"> <s:property/> </s:iterator>
1 2 3 4 5
以上两个示例会输出相同的结果,如上图所示,这里大家也学到了PageContext中变量的取值的方法%{#attr.anyname}。同时一定要区分几个概念:PageContext、ActionContext及ValueStack,不得不承认Struts在这方面做得有点乱,不同标签行为有些不一致,写代码时大家做好调试即可。
以下是我个人的一些看法:Sort标签在Struts早几年的版本里我是没有印象的。对于这个标签,我个人并不喜好,有几点原因:
版权声明:本文为20NN作者「sophia」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:http://www.20nn.cn/struts/struts-sort.html
不良信息举报电话:029-85678878,商务合作短信留言:18291486809,邮箱:yte1@qq.com
『野天鹅』以分享生活智慧为中心,内容包括社保、档案、户籍、学业、商业、理财等,我们希望我们精心编排的内容能为您的日常生活提供真正有效的帮助。
『西安野天鹅网络技术有限公司』