在 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>
${roleMenuMap[user.role]} 根據當前用戶角色獲取對應的 Map<String, List<Menu>>,var="entry" 代表每一組 Map.Entry<String, List<Menu>>。${entry.key} 為菜單分組名稱(如「系統管理」),${entry.value} 為該分組下的 List<Menu>。${entry.value} 再次 <c:forEach>,var="item" 代表單個 Menu 對象,直接通過 ${item.url}、${item.name} 取屬性值。rel="external nofollow" 避免搜索引擎爬蟲權重流失。JSTL + EL 表達式能高效處理複雜集合遍歷,關鍵在於理解 Map.Entry 的鍵值結構與多層 <c:forEach> 的變量作用域。掌握此技巧,可大幅減少 JSP 中的腳本代碼,提升可維護性。