Struts2常用的集合控制标签

[size=medium][align=center][b]<s:iterator/>迭代器标签[/b][/align][/size]
迭代器标签被用来迭代一个值,这个值可以是java.util.Collection或java.util.Iterator中的任何一种

<s:iterator value="集合对象" status="迭代状态实例">
<s:property value="#status.count"/>
</s:iterator>


<h3>带有IteratorStatus的迭代</h3>
   <table>
    <s:iterator value="comboMeals" status="comboMealsStatus">
     <tr>
      <s:if test="#comboMealsStatus.even == true">
        <td style="background: #CCCCCC"><s:property/></td>
      </s:if>
      <s:elseif test="#comboMealsStatus.first == true">
        <td><s:property/> (This is first value) </td>
      </s:elseif>
      <s:else>
        <td><s:property/></td>
      </s:else>
     </tr>
    </s:iterator>
  </table>

[align=center][b]status实例对象有几个非常有用的方法[/b]:
int getCount(): 返回目前迭代输出的元素个数
int getIndex(): 返回当前迭代元素的索引号,从0开始的序号

boolean isOdd(): 返回当前迭代元素索引号是否为奇数
boolean isEven(): 返回当前迭代元素索引号是否为偶数

boolean isFirst(): 返回当前迭代元素索引号是否为第一个元素
boolean isLast(): 返回当前迭代元素索引号是否为最后一个元素[/align]

[size=medium][align=center][b]<s:append>标签[/b][/align][/size]
<s:append>标签被用来将多个迭代器(由List或Map创建)组合到一个单独的迭代器中

<s:append var="customListIterator">
 <s:param value="%{list1}" />
 <s:param value="%{list2}" />
 <s:param value="%{list3}" />
</s:append>
<s:iterator value="%{#customListIterator}" status="sta">
 <s:property value="#sta.count" />
</s:iterator>


[size=medium][align=center][b]<s:generator>标签[/b][/align][/size]
<s:append>标签被用来将指定的字符串按指定的分隔符拆分成字符串集合,并存放在ValueStack栈顶,供迭代器标签迭代输出。如果指定id属性则将拆分后的字符串集合存放在request中。

  <s:generator val="%{'java|.net|c|python|shell'}" separator="|">
    <s:iterator status="st">
      <s:property value="st.count" />,<s:property />
    </s:iterator>
  </s:generator>

  <s:generator val="%{'书法,足球,音乐'}" separator="," id="mylove" count="2">
    <s:iterator value="#request.mylove" status="st" id="row">
      <s:property value="st.count" />,<s:property value="row"/>
    </s:iterator>
  </s:generator>


[size=medium][align=center][b]<s:merge>标签[/b][/align][/size]
<s:merge>标签的用法与<s:append>一样,也是用来合并集合,不过<s:append>是按合并的顺序依次重新排序的,而<s:merge>对于List迭代器顺序是这样的:

假设有两个迭代器,每个都有两条记录。在使用 <s:merge>标签组合到一个单独的迭代器以后,记录的顺序看上去会如下所似:

1 第一个迭代器的第一个记录;
2 第二个迭代器的第一个记录;
3 第一个迭代器的第二个记录;
4 第二个迭代器的第二个记录。

这只适用于List迭代器,对于Map迭代器,顺序则是随机的

<s:merge var="customListIterator">
  <s:param value="%{list1}" />
  <s:param value="%{list2}" />
  <s:param value="%{list3}" />
</s:merge>
<s:iterator value="%{#customListIterator}" status="st">
  <s:property value="st.count"/>
</s:iterator>


[size=medium][align=center][b]<s:subset>标签[/b][/align][/size]
<s:subset>标签被用来输出一个迭代器元素的子集合或一部分。使用“start”和“count”属性以及decider()方法输出迭代器(list)的子集合。
source:指定源集合,如果此属性不存在,默认从ValueStack栈顶取
count:指定截取元素个数,默认为所有元素
start:指定截取的起始位置,默认值为0
id:如果指定了该属性,则将截取到的子集合放到pageContext对象中
decider:如果指定了该属性,则使用指定筛选器对源集合每个元素进行筛选

<s:subset source="numbers" start="1" count="5">
  <s:iterator>
   <s:property />
  </s:iterator>
</s:subset>

<s:subset source="numbers" decider="numberDecider">
  <s:iterator>
   <s:property />
  </s:iterator>
</s:subset>


[size=medium][align=center][b]<s:sort>排序标签[/b][/align][/size]
<s:sort>标签被用来使用java.util.Comparator对List进行排序。
source:指定源集合,如果此属性不存在,默认从ValueStack栈顶取
comparator:必填属性,用于指定比较器,实现排序规则
id:如果指定了该属性,则将截取到的子集合放到pageContext对象中

import java.util.Comparator;

/** 自定义排序器 */
public class MyComparator implements Comparator {

//返回值大于表示第一个元素大于第二个,等于零表示相等,小于零表示小于第二个
public int compare(Object o1, Object o2){
//实现单词第一个字典顺序
String e1 = (String)e1;
String e2 = (String)e2;
return e1.charAt(0)-e2.charAt(0);
}

}



<s:bean name="com.util.MyComparator" id="myeComparator" />

<s:sort comparator="myComparator" source="{'V','Z','S','A'}">
<s:iterator status="st">
<s:property value="st.count" />, <s:property />
</s:iterator>
</s:sort>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值