輕量級JavaEE企業應用實戰(十四)

控制標籤

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中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章