首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSP 頁面遍歷 Struts2 Action 傳遞的 List 集合完整示例

     編輯:程式設計綜合問答

場景

Struts2 Action 中準備 List<User> userList 並提供 Getter,JSP 需遍歷顯示。

Action 代碼

public class UserAction extends ActionSupport {
    private List<User> userList;
    public List<User> getUserList() { return userList; }
    public String execute() {
        userList = userService.findAll(); // 查詢數據
        return SUCCESS;
    }
}

JSP 遍歷寫法(推薦:Struts2 標籤庫 + OGNL)

<%@ 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)。
#statOGNL 中引用 status 定義的迭代狀態對象,# 表示上下文變量。

替代方案:JSTL + EL(不依賴 Struts 標籤)

<%@ 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)。

常見問題避雷

  • 集合為 null:Action 中初始化 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 為通用備選。注意集合非空初始化與屬性名大小寫一致。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved