首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JSTL 遍歷 Map 與 List 嵌套結構及 EL 表達式取值技巧

     編輯:Java 相關知識

場景介紹

在 Web 開發中,常遇到請求域存放嵌套集合的情況,例如 Map<Role, Map<String, List<Menu>>>。本文展示如何使用 JSTL <c:forEach> 配合 EL 表達式優雅地遍歷並渲染多級導航菜單。

核心代碼示例

<c:set var="user" value="${session_usr_key}" />
<c:forEach items="${roleMenuMap[user.role]}" var="entry">
    <li>
        <b class="nav_left_h1"> ${entry.key} </b>
        <img class="index_sign" title="專業的網站建設資源、腳本編程學習類網站" 
             src="https://www.jb51.net/index_up.jpg" >
        <ul class="nav_left_sub">
            <c:forEach items="${entry.value}" var="item">
                <li>
                    <span class="dot"></span>
                    <a href="${basePath}${item.url}" rel="external nofollow"> ${item.name} </a>
                </li>
            </c:forEach>
        </ul>
    </li>
</c:forEach>

關鍵點解析

  1. 外層遍歷:${roleMenuMap[user.role]} 根據當前用戶角色獲取對應的 Map<String, List<Menu>>,var="entry" 代表每一組 Map.Entry<String, List<Menu>>。
  2. 鍵值訪問:${entry.key} 為菜單分組名稱(如「系統管理」),${entry.value} 為該分組下的 List<Menu>。
  3. 內層遍歷:對 ${entry.value} 再次 <c:forEach>,var="item" 代表單個 Menu 對象,直接通過 ${item.url}、${item.name} 取屬性值。
  4. EL 表達式優勢:無需編寫 Java 代碼,自動處理 null 安全,語法簡潔接近自然語言。

常見陷阱與最佳實踐

  • 確保 Map 的 Key 類型與 EL 中變量類型一致(如 Role 枚舉),否則無法匹配。
  • 巢狀層級過深時,建議在 Controller 中預先扁平化數據,降低視圖複雜度。
  • 使用 rel="external nofollow" 避免搜索引擎爬蟲權重流失。

總結

JSTL + EL 表達式能高效處理複雜集合遍歷,關鍵在於理解 Map.Entry 的鍵值結構與多層 <c:forEach> 的變量作用域。掌握此技巧,可大幅減少 JSP 中的腳本代碼,提升可維護性。

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