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

JSP EL 表達式提取 List 集合中指定對象屬性:`${list[1].name}` 與 JSTL `` 兩大用法

     編輯:程式設計綜合問答

場景

Servlet 執行:request.setAttribute("list", userList); // List<User>
JSP 頁面需獲取:

  • 第 2 個 User 的 name 屬性(索引 1)。
  • 遍歷顯示所有 User 的 name。

方案一:EL 直接索引取值(最簡潔)

<!-- 獲取第 2 個元素的 name -->
${list[1].name}
<!-- 或點語法 (需屬性名合法標識符) -->
${list[1]['name']}

注意:EL 索引從 0 開始,`list[1]` 即第 2 個。若列表可能為空/長度不足,EL 會輸出空字符串而不拋異常。

方案二:JSTL `` 遍歷(標準、功能豐富)

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>

<c:forEach var="user" items="${list}" varStatus="status">
    <div>${status.index + 1}. ${user.name}</div>
    <c:if test="${status.index == 1}">
        <span class="highlight">(第二個)</span>
    </c:if>
</c:forEach>

`varStatus` 提供 `index`、`count`、`first`、`last` 等狀態,支持條件渲染、樣式控制。

方案三:EL 隱式對象 `fn:length()` 判空

<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>
<c:if test="${fn:length(list) > 0}">
    第二個用戶:${list[1].name}
</c:if>

對比選型

需求推薦理由
單一固定位置取值EL 直接索引 `${list[1].name}`零標籤、極簡
遍歷/條件/索引/統計JSTL ``功能完整、可讀性強
複雜邏輯/格式化JSTL + EL 函數 (`fn:substring`, `fn:replace`)避免 Scriptlet 污染 JSP

避坑提醒

  • EL 表達式不支持方法調用帶參數:`${user.getName()}` 可行(無參 getter),但 `${user.getName('prefix')}` 不支持,需在 Servlet/Controller 預處理或寫自定義 EL 函數。
  • List 中元素為 Map 時:`${list[1].keyName}` 或 `${list[1]['key-name']}`(含特殊字符鍵)。
  • JSTL 1.2 依賴:
    `javax.servletjstl1.2`
    容器需支持 Servlet 2.4+ (Tomcat 6+)。

「單值用 EL 索引,遍歷用 JSTL」,JSP 表達層即刻清爽專業。

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