struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="iterator" extends="struts-default">
<action name="iterator" class="com.struts.ognl.IteratorAction" method="execute">
<result name="success">/iterator.jsp</result>
</action>
</package>
</struts>
IteratorAction.java:
package com.struts.ognl;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class IteratorAction extends ActionSupport {
@Override
public String execute() throws Exception {
// 创建一个 list 集合,一个 map 集合
List<User> list = new ArrayList<>();
Map<Integer, User> map = new HashMap<>();
// 向集合中存入数据
for (int i = 1; i < 11; i++) {
User user = new User(i, "jack" + i);
list.add(user);
map.put(i, user);
}
// 保存数据:保存到代表上下文对象的 map 中,在页面中取值时可以不用指定是从哪个 map 取值的
ActionContext.getContext().getContextMap().put("list", list);
ActionContext.getContext().getContextMap().put("map", map);
return super.execute();
}
}
iterator.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 导入 struts 标签 --%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>迭代器标签</title>
<style type="text/css">
.odd{
background-color: azure;
}
.even{
background-color: antiquewhite;
}
</style>
</head>
<body>
<br>1、list 迭代<br>
<table cellspacing="0" cellpadding="5" border="1">
<tr>
<td>编号</td>
<td>名称</td>
</tr>
<%--
value:指定被迭代的集合,因为 list 是存储在表示上下文对象的 Map 中的,所以可以直接获取;
如果没有指定 value 属性,则默认使用 valueStack 栈顶的元素;
status:该属性指定迭代时的 IteratorStatus 实例;该属性的取值有以下几种:
count:表示当前迭代了几个元素;
index:表示当前迭代元素的索引;
even:表示当前被迭代元素的索引是否是偶数;如果是返回 true;
odd:表示当前被迭代元素的索引是否是奇数;如果是返回 true;
first:表示当前被迭代元素是否是第一个元素;如果是返回 true;
last:表示当前被迭代元素是否是最后一个元素;如果是返回 true;
--%>
<s:iterator value="#list" var="user" status="st">
<%-- "#st.even?'even':'odd'":ognl表达式运算;
如果当前行是偶数行,<tr>标签的 class="even";
如果当前行是奇数行,<tr>标签的 class="odd";--%>
<tr class=<s:property value="#st.even?'even':'odd'"/>>
<td><s:property value="#user.id"/></td>
<td><s:property value="#user.name"/></td>
</tr>
</s:iterator>
</table>
<hr>
<br>2、map 迭代<br>
<table cellpadding="5" cellspacing="0" border="1">
<tr>
<td>编号</td>
<td>对象</td>
<td>名称</td>
</tr>
<s:iterator value="#map" var="en" status="stat">
<tr>
<td><s:property value="#en.key"/></td>
<td><s:property value="#en.value"/></td>
<td><s:property value="#en.value.name"/></td>
</tr>
</s:iterator>
</table>
</body>
</html>
运行结果: