1.iterator标签使用
*用来处理循环,可以用它遍历数组,Set和List等集合对象,这个标签还支持在ActionContext中保持一个保存遍历状态的对象,通过这个变量可以得到当前循环的各种信息。
*它在遍历一组对象的时候,它把正在循环的对象放在值栈的栈顶,所以可以直接使用这个对象的方法或者属性。
*属性信息
*value:用来指明访问的是哪个对象。
*status:这个属性在ActionContext中保存一个对象,用来返回当前循环的各种信息,可以返回的信息如下:
*count:集合含有多少个对象
*index:正在循环的这一项的索引
*even:当前遍历到的对象是不是处于列表的偶数索引位置
*odd:当前遍历到的对象是不是处于列表的奇数索引位置
*first:正在循环的是不是第一个
*last:正在循环的是不是最后一个
*begin, end,step:指明了如果使用索引来进行循环时的开始、结束和步长。
*var:变量名称,用来引用存放到值栈的被循环的对象
简单示例1:实现类似于for循环的功能
<s:iterator var="i" begin="1" end="10" step="1">
<s:property value="#i"/>
</s:iterator>
简单示例2:实现类似于while循环的功能
<%
List strList = new ArrayList();
for(int i = 0; i < 10; i++) {
strList.add("str" + i);
}
request.setAttribute("strList", strList);
%>
<s:iterator var="str" value="#request['strList']">
<s:property value="#str"/>
</s:iterator>
输出结果:
str0 str1 str2 str3 str4 str5 str6 str7 str8 str9
简单示例3:访问复杂对象
<%
List userList = new ArrayList();
User user1 = new User();
user1.setAge(20);
user1.setName("zhangsan");
User user2 = new User();
user2.setAge(30);
user2.setName("lisi");
userList.add(user1);
userList.add(user2);
request.setAttribute("users", userList);
%>
<s:iterator var="user" value="#request.users">
user.name=<s:property value="name"/>,
user.age=<s:property value="age"/><br/>
</s:iterator>
输出结果:
user.name=zhangsan,user.age=20
user.name=lisi,user.age=30
简单示例4:使用status属性
如果想输出当前循环的索引,或者是想要把循环输出的数据用表格来展示,并按照奇数行和偶数行来设置不同的背景色,也就是用户熟悉的波浪纹或者斑马纹的效果。
就要使用status属性。<s:property>引用status属性名称的时候前面要加#号
<%
List userList = new ArrayList();
User user1 = new User();
user1.setAge(20);
user1.setName("zhangsan");
User user2 = new User();
user2.setAge(30);
user2.setName("lisi");
userList.add(user1);
userList.add(user2);
request.setAttribute("users", userList);
%>
<s:iterator var="user" value="#request.users" status="state">
索引=<s:property value="#state.index"/>,
user.name=<s:property value="name"/>,
user.age=<s:property value="age"/><br/>
</s:iterator>
输出结果:
索引=0, user.name=zhangsan,user.age=20
索引=1, user.name=lisi,user.age=30
简单示例:5:实现斑马纹与波浪纹效果
<%
List userList = new ArrayList();
User user1 = new User();
user1.setAge(20);
user1.setName("zhangsan");
User user2 = new User();
user2.setAge(30);
user2.setName("lisi");
User user3 = new User();
user3.setAge(30);
user3.setName("wangwu");
User user4 = new User();
user4.setAge(30);
user4.setName("maliu");
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
request.setAttribute("users", userList);
%>
<table border="1">
<tr>
<td colspan=4 align="center">用户列表</td>
</tr>
<tr>
<td>索引</td>
<td>用户姓名</td>
<td>用户年龄</td>
<td>操作</td>
</tr>
<s:iterator var="user" value="#request.users" status="state">
<tr
<s:if test="#state.even">
bgcolor="#EFF8FF"
</s:if>
<s:else>
bgcolor="#B4CFF1"
</s:else>
>
<td><s:property value="#state.index"/></td>
<td><s:property value="name"/></td>
<td><s:property value="age" /></td>
<td><a href="">修改</a> <a href="">删除</a></td>
</tr>
</s:iterator>
</table>
输出结果:
输出结果:
<li>遍历集合:<br />
<s:iterator value="{1, 2, 3}" >
<s:property/> |
</s:iterator>
</li>
<li>自定义变量:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
<s:property value="#x.toUpperCase()"/> |
</s:iterator>
</li>
<li>使用status:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
<s:property/> |
遍历过的元素总数:<s:property value="#status.count"/> |
遍历过的元素索引:<s:property value="#status.index"/> |
当前是偶数?:<s:property value="#status.even"/> |
当前是奇数?:<s:property value="#status.odd"/> |
是第一个元素吗?:<s:property value="#status.first"/> |
是最后一个元素吗?:<s:property value="#status.last"/>
<br />
</s:iterator>
</li>
<li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
<s:property value="key"/> | <s:property value="value"/> <br />
</s:iterator>
</li>
<li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>
</li>