使用兩層 <c:forEach> 遍歷 ${tlist}(分類)與 ${llist}(子項),但子項未按分類分組,導致所有子項平鋪在每個分類下,頁面顯示混亂。
tlist:分類列表,每項含 typeId、typeName;llist:子項列表,每項含 lineId、lineName、typeId(外鍵關聯分類)。<c:forEach items="${tlist}" var="t">
<div class="con1-1">
<a href="#">${t.typeName}</a>
<c:forEach items="${llist}" var="l"> <!-- 錯誤:遍歷全部子項 -->
<a href="#">${l.lineName}</a>
</c:forEach>
</div>
</c:forEach>
<c:forEach items="${tlist}" var="t">
<div class="con1-1">
<a href="#">${t.typeName}</a>
<c:forEach items="${llist}" var="l">
<c:if test="${l.typeId == t.typeId}"> <!-- 關鍵:按 typeId 過濾 -->
<a href="#">${l.lineName}</a>
</c:if>
</c:forEach>
</div>
</c:forEach>
後端直接構建 Map<Category, List<Item>> 或 List<CategoryVO>(內含子項列表),前端單層循環即可:
<c:forEach items="${categoryList}" var="cat">
<div class="con1-1">
<a href="#">${cat.typeName}</a>
<c:forEach items="${cat.items}" var="item">
<a href="#">${item.lineName}</a>
</c:forEach>
</div>
</c:forEach>
優勢:邏輯清晰、減少前端判斷、便於緩存與分頁。
c:if),關聯外鍵字段;