struts2 <s:iterator> status屬性

轉載▼
iterator标簽主要是用于疊代輸出集合元素,如list set map 數組等,在使用标簽的時候有三個屬性值得我們關注
1. value屬性:可選的屬性,value屬性是指一個被疊代的集合,使用ognl表達式指定,如果為空的話預設就是ValueStack棧頂的集合.
2.id屬性:可選屬性, 是指集合元素的id
3.status屬性:可選屬性,該屬性在疊代時會産生一個IteratorStatus對象,該對象可以判斷目前元素的位置,包含了以下屬性方法:
int getCount(); 疊代元素個數
int getIndex(); 疊代元素目前索引
boolean getFirst(); 是否為第一個
boolean getEven(); 是否為偶
boolean getLast(); 是否最後一個
bolean getOdd(); 是否為奇
由于iteratorstatus對象并不是ognl的根對象,是以通路需要加上#通路,如下例子:
<s:iterator value=”{’dd’,'bb’,'cc’}” status=”st”>
<s:if test=”#st.odd”>
<s:property value=”#st.index”/>
</s:if>
</s:iterator>
此外:iterator也可以疊代map對象,map對象中有幾對key-value 就疊代幾次,分别使用
<s:property value=”key”/>
<s:property value=”value”/>
輸出即可.
案例如下(Struts2标簽):實作奇偶行不同顔色顯示
JSP中結果集顯示如下:
<s:iterator value="resultList" status="status">
<tr class="<s:if test="#status.even">row-even</s:if><s:else>row-odd</s:else>">
<td>
<s:property value=""/>
</td>
</tr>
</s:iterator>
樣式表可以參考:
.row-even{background-color:#def7c2;}
.row-odd{background-color:#c8e7a6;}
除了使用#status.even判斷是否偶數行外,還有其他幾個屬性可以使用:
#status.odd 是否奇數行
#status.count 目前行數
#status.index 目前行的序号,從0開始[#status.count=#status.index+1]
#status.first 是否第一行
#status.last 是否最後一行
#status.modules(int) 目前行數取模
1:jsp頁面定義元素寫法 數組或list
<s:iterator value="{'1','2','3','4','5'}" id='number'>
<s:property value='number'/>A
</s:iterator>
列印結果為: 1A2A3A4A5A
2:索引的用法
如果指定了status,每次的疊代資料都有IteratorStatus的執行個體,它有以下幾個方法
<s:iterator 中的status 使用方法
1:#status.odd 目前元素索引是否奇數行
2:#status.even 目前元素索引是否偶數
行
3:#status.count 目前疊代了幾個元素
4:#status.index 目前元素索引,從0開始『#status.count=#status.index+1』
5:#status.first 目前是否第一個元素
6:#status.last 目前是否最後一個元素
7:#status.modules(int) 目前行數取模
<s:iterator value="{'a','b','c'}" id='char' status='st'>
<s:if test="#st.Even">
現在的索引是奇數為:<s:property value='#st.index'/>
</s:if>
目前元素值:<s:property value='char'/>
</s:iterator>
3:周遊map
value可以直接定義為:
value="#{"1":"a","2":"b"}"
每個元素以都好隔開。元素之間的key和value 冒号隔開
value也可以是資料棧裡面的java.util.Map對象
周遊寫法如下:
<s:iterator value="map" id="id" status="st">
key : <s:property value='key'/>
value:<s:property vlaue='value'/>
</s:iterator>
當然key 和value 都可以使java 的 Object
3:周遊資料棧.簡單的List類,
List<Attr>
class Attr{String attrName;String getAttrName(){return "123";}}
<s:iterator value="label" id="id">
<s:property value="#id.attrName" />
</s:iterator>
當然value 還可以寫成 value="%{label}" label可以有.操作
label的屬性List 可以寫成value="%{label.list}" 相當于:getLabel().getList();
4:周遊2個list;
List<AttrName> attrN {color,size,style}
List<AttrValue> attrV {red,20,gay}
這2個list的元素是一一對應的,一個attrN對應一個attrV
<s:iterator value="%{attrN }" id="id" status="status">
index is : <s:property value='status.index'/>
attrName is : <s:property value='id'/> or <s:property value='%{id}'/>
attrName is : <s:property value='%{attrV[#status.index]}'/>
</s:iterator>