控制標籤
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中