Struts2中s:iterator標籤的使用詳解
阿新 • • 發佈:2019-01-03
使用iterator遍歷一個值。一個可迭代的值可以是java.util.Collection,java.util.Iterator中的任何一個。
引數
begin | false | 0 | false | Integer | 若指定,那麼迭代器將從該索引開始 |
end | false | 該'values' List或array的大小, 或若'step'為負則為0 | false | Integer | 若指定,那麼迭代器將到該索引結束(含該索引) |
id | false | false | String |
已過期。用' |
|
status | false | false | false | Boolean | 若指定,那麼在每次迭代時,迭代狀態的例項將被壓入堆疊 |
step | false | 1 | false | Integer | 若指定,在每次迭代時,迭代索引將加上此值。它可以是一個負值,在這種情況下,'begin'必須是大於'end' |
value | false | false | String | 可迭代源物件進行遍歷,另外物件本身將進入一個新建立的列表 | |
var | false | false | String | 名字用於將引用的值推入值棧 |
例子
下面的示例檢索當前物件的值棧getDays()方法的值,並用它來遍歷。<s:property/>標籤打印出迭代器的當前值。
<s:iterator value="days">
<p>day is: <s:property/></p>
</s:iterator>
下面的示例使用一個Bean標籤,並將其放置到ActionContext中。 iterator標籤將從ActionContext中檢索該物件,然後同上呼叫其getDays()方法。status屬性也可以用來建立一個IteratorStatus物件,該物件在這個例子中,odd()方法被用來交替行顏色:下一個例子將進一步證明使用status屬性,從actioin類通過OGNL使用DAO,遍歷組和他們的使用者(在安全環境)。last()方法,表示如果當前物件是在迭代過程中的最後一個可用的,如果不是,我們需要使用一個逗號分隔的使用者:<s:bean name="org.apache.struts2.example.IteratorExample" var="it"> <s:param name="day" value="'foo'"/> <s:param name="day" value="'bar'"/> </s:bean> <p/> <table border="0" cellspacing="0" cellpadding="1"> <tr> <th>Days of the week</th> </tr> <p/> <s:iterator value="#it.days" status="rowstatus"> <tr> <s:if test="#rowstatus.odd == true"> <td style="background: grey"><s:property/></td> </s:if> <s:else> <td><s:property/></td> </s:else> </tr> </s:iterator> </table>
<s:iterator value="groupDao.groups" status="groupStatus">
<tr class="<s:if test="#groupStatus.odd == true ">odd</s:if><s:else>even</s:else>">
<td><s:property value="name" /></td>
<td><s:property value="description" /></td>
<td>
<s:iterator value="users" status="userStatus">
<s:property value="fullName" /><s:if test="!#userStatus.last">,</s:if>
</s:iterator>
</td>
</tr>
</s:iterator>
下一個例子遍歷一個action集合,每個迭代值傳遞到另一個action中。這裡的訣竅在於使用'[0]'運算子。它採用當前迭代器值,並把它傳遞到編輯操作。使用'[0]'運算子具有相同的效果,使用<s:property/>。 (然而後者,內部引數標籤不執行)。<s:action name="entries" var="entries"/>
<s:iterator value="#entries.entries" >
<s:property value="name" />
<s:property />
<s:push value="...">
<s:action name="edit" var="edit" >
<s:param name="entry" value="[0]" />
</s:action>
</push>
</s:iterator>
一個迭代5次的迴圈<s:iterator var="counter" begin="1" end="5" >
<!-- current iteration value (1, ... 5) -->
<s:property value="top" />
</s:iterator>
另一種方式來建立一個簡單的迴圈,類似於JSTL的<c:forEach begin="..." end="..." ...>是使用一些的OGNL魔力,它提供了一些覆蓋魔力使0-N迴圈實現。這個例子也迴圈五次。<s:iterator status="stat" value="(5).{ #this }" >
<s:property value="#stat.count" /> <!-- Note that "count" is 1-based, "index" is 0-based. -->
</s:iterator>
一個迭代部分列表的迴圈<s:iterator value="{1,2,3,4,5}" begin="2" end="4" >
<!-- current iteration value (2,3,4) -->
<s:property value="top" />
</s:iterator>
本文粗略翻譯了Struts官網上的s:iterator標籤,看起來“和諧”些,不妥之處還請指正~