1. 程式人生 > >Struts2中s:iterator標籤的使用詳解

Struts2中s:iterator標籤的使用詳解

使用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 已過期。用'
var'取代
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()方法被用來交替行顏色:
<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>
下一個例子將進一步證明使用status屬性,從actioin類通過OGNL使用DAO,遍歷組和他們的使用者(在安全環境)。last()方法,表示如果當前物件是在迭代過程中的最後一個可用的,如果不是,我們需要使用一個逗號分隔的使用者:
<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標籤,看起來“和諧”些,不妥之處還請指正~