控制标签
Struts2的非UI标签包括:控制标签和数据标签,主要用于完成流程控制,以及操作Struts2的ValueStack。
数据标签主要结合OGNL表达式进行数据访问
控制标签可以完成流程控制,如分支、循环,也可完成对集合的合并、排序等操作
if/elseif/else标签
<s:if test="表达式">
...
</s:if>
<s:elseif test="表达式">
...
</s:elseif>
<s:else>
...
</s:else>
例:
<s:set name="age" value="22" />
<s:if test="#age > 60">
老年人
</s:if>
iterator
属性:value、id、status都是可选属性
<s:iterator value="{'111', '222', '333'}" id="name" status="st">
<tr>
<td><s:property value="#st.count" /></td>
<td><s:property value="name" /></td>
</tr>
</s:iterator>
如果该标签指定status属性,即每次迭代都会有一个IteratorStatus实例,包含方法:
int getCount() //当前迭代了几个元素
int getIndex() //当前迭代元素索引
boolean isEven() //当前被迭代元素索引是否是一个偶数
boolean isFirst() //当前被迭代元素索引是否是第一个元素
boolean isLast() //当前被迭代元素索引是否是最后一个元素
boolean isOdd() //当前被迭代元素索引是否是奇数
append标签
将多个集合对象拼接起来,组成一个新的结合。通过这个拼接,从而允许通过一个iterator标签完成对多个集合的迭代
使用该标签需要指定一个var属性(可以是id,推荐是var),表示新集合的名字
<s:append var="newList">
<s:param value="{'111', '222', '333'}" />
<s:param value="{'444', '555'}" />
</s:append>
<s:iterator value="#newList" status="st" id="ele">
<tr <s:if test="#st.odd"> style="background-color:#bbbbbb"</s:if>>
<td><s:property value="#st.count" /></td>
<td><s:property value="ele" /></td>
</tr>
</s:iterator>
generator标签
将制定字符串按指定分隔符分隔成多个子串,临时生成的子串可以使用iterator标签迭代输出
作用类似于String对象的split方法,但这个标签比split强大
属性:
count //必填,指定生成集合元素的元素的总数
separator //必填,指定解析字符串的分隔符
val //必填,指定被解析的字符串
converter //可选,指定一个转换器,讲集合中的每个字符串转换成对象,
//可以将一个字符串解析成对象集合。该属性必须是个
//org.apache.Struts2.util.IteratorGenerator.Converter对象
var //可选,将生成的Iterator对象放入Stack Context中
<s:generator val="'111','222','333'" separator=",">
<s:iterator status="st">
<tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
</tr>
</s:iterator>
</s:generator>
merge标签
与append类似,产生的新集合会有所区别:
采用merge,会将所有集合的第一个元素拼接起来,在对所有集合的下一个元素进行拼接
subset标签
取得集合的子集;底层通过dor.apache.struts2.util.Subset.IteratorFilter类提供实现:
count //可选,指定子集中元素的个数,如果不指定,默认获取所有
source //可选,指定源集合。如果不指定,默认取得ValueStack栈顶元素
start //可选,指定子集从源集合的第几个元素开始截取,默认从第一个(0)开始
decider //可选,由开发者子集决定是否选中该元素。该属性必须指定一个
//org.apache.struts2.util.SubsetIteratorFilter.Decider对象
var //可选,如果指定该属性,生成的Iterator对象设置成page范围的属性
<s:subset source="{'111', '222', '333', '444', '555'}"
start="1", count="4">
<s:iterator status="st">
<tr<s:if test="#st.odd">
style="background-color:#bbbbbb"</s:if>>
...
</tr>
</s:iterator>
</s:subset>
<s:bean var="mydecider" name="com.uril.MyDecider">
<s:subset source="{'111', '222', '333', '444', '555'}"
decider="#mydecider" var="newList">
<s:iterator status="st" value="#attr.newList">
<tr<s:if test="#st.odd">
style="background-color:#bbbbbb"</s:if>>
...
</tr>
</s:iterator>
</s:subset>
sort标签
用于指定的集合元素进行排序,必须提供自己的排序规则,即自己实现Comparator,需要实现java.util.Comparator接口
comparator //必填,指定进行排序的Comparator实例
source //可选,指定被排序的集合,如果不指定,则选用ValueStack栈顶元素
var //可选,讲生成的Iterator对象设置成page范围的属性,不放入Stack Context中