Struts2 Action 中準備 List<User> userList 並提供 Getter,JSP 需遍歷顯示。
public class UserAction extends ActionSupport {
private List<User> userList;
public List<User> getUserList() { return userList; }
public String execute() {
userList = userService.findAll(); // 查詢數據
return SUCCESS;
}
}
<%@ taglib prefix="s" uri="/struts-tags" %>
<table>
<tr><th>ID</th><th>用戶名</th><th>郵箱</th></tr>
<s:iterator value="userList" var="user" status="stat">
<tr class="<s:property value="#stat.odd ? 'odd' : 'even'" />">
<td><s:property value="#stat.index + 1" /></td>
<td><s:property value="username" /></td>
<td><s:property value="email" /></td>
</tr>
</s:iterator>
</table>
| 標籤/屬性 | 作用 |
|---|---|
<s:iterator> | 遍歷集合,value 指定集合表達式(OGNL),var 定義迭代變量名,status 提供 IteratorStatus(index, count, odd, even, first, last)。 |
<s:property> | 輸出值,value 為 OGNL 表達式,可訪問迭代變量(如 username)或狀態對象(如 #stat.index)。 |
#stat | OGNL 中引用 status 定義的迭代狀態對象,# 表示上下文變量。 |
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${userList}" var="user" varStatus="stat">
<tr class="${stat.index % 2 == 0 ? 'even' : 'odd'}">
<td>${stat.count}</td>
<td>${user.username}</td>
<td>${user.email}</td>
</tr>
</c:forEach>
需在 web.xml 配置 JSTL 或確保容器內置(Tomcat 8+ 需額外添加 jstl.jar、standard.jar)。
userList = new ArrayList<>(),避免 JSP 遍歷報 NPE。<s:property value="userName" /> 實體屬性為 username,OGNL 大小寫敏感,需一致。<s:iterator value="user.orders" var="order">...</s:iterator> 內層可直接引用外層變量。Struts2 迭代器標籤官方文檔:Iterator Tag Reference
經典博客範例:JSP 遍歷 List 集合詳解
Struts2 專案首選 <s:iterator> + <s:property> 遍歷 List,OGNL 表達式強大且與框架無縫集成。JSTL/EL 為通用備選。注意集合非空初始化與屬性名大小寫一致。