iterator標籤主要是用於迭代輸出集合元素,如list set map 數組等,在使用標籤的時候有三個屬性值得咱們關注java
1. value屬性:可選的屬性,value屬性是指一個被迭代的集合,使用ognl表達式指定,若是爲空的話默認就是ValueStack棧頂的集合.
2.id屬性:可選屬性, 是指集合元素的id
3.status屬性:可選屬性,該屬性在迭代時會產生一個IteratorStatus對象,該對象能夠判斷當前元素的位置,包含了如下屬性方法:數組
int getCount(); 迭代元素個數jsp
int getIndex(); 迭代元素當前索引spa
boolean getFirst(); 是否爲第一個對象
boolean getEven(); 是否爲偶索引
boolean getLast(); 是否最後一個ci
bolean getOdd(); 是否爲奇get
因爲iteratorstatus對象並非ognl的根對象,所以訪問須要加上#訪問,以下例子:it
<s:iterator value=」{’dd’,'bb’,'cc’}」 status=」st」>ast
<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>