您的位置:首页 > 编程语言 > Java开发

Struts2中s:iterator标签的使用详解

2013-08-16 19:02 337 查看
使用iterator遍历一个值。一个可迭代的值可以是java.util.Collection,java.util.Iterator中的任何一个。

参数

NameRequiredDefaultEvaluatedTypeDescription
beginfalse0falseInteger若指定,那么迭代器将从该索引开始
endfalse该'values' List或array的大小, 或若'step'为负则为0falseInteger若指定,那么迭代器将到该索引结束(含该索引)
idfalsefalseString已过期。用'var'取代
statusfalsefalsefalseBoolean若指定,那么在每次迭代时,迭代状态的实例将被压入堆栈
stepfalse1falseInteger若指定,在每次迭代时,迭代索引将加上此值。它可以是一个负值,在这种情况下,'begin'必须是大于'end'
valuefalsefalseString可迭代源对象进行遍历,另外对象本身将进入一个新创建的列表
varfalsefalseString名字用于将引用的值推入值栈
例子

下面的示例检索当前对象的值栈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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: