使用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标签,看起来“和谐”些,不妥之处还请指正~

原文地址:http://struts.apache.org/release/2.3.x/docs/iterator.html

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐