我在尝试使用JSTL显示子类别菜单时遇到问题。
我正在开发的网站有一个css列表菜单类型。菜单类别的名称在具有主键的数据库中创建,子菜单也在数据库中创建,并具有主键和(外键=“类别”)。我已设法检索并显示此主菜单,但我不知道当用户将主菜单悬停时如何显示子菜单:
目前使用的代码:
//<div id='cssleftNav'>
<ul>
<c:forEach var = "category" items="${categories.rows}">
<li class='has-sub'>
<a href="category?${category.id}"><span>${category.name}
</span></a>
<ul>
<c:forEach var = "subcategory" items="${subcategories.rows}">
<li>
<a href="category?${subcategory.id}"><span>${subcategory.name}
</span<</a>
</li>
</c:forEach>
</ul>
</li>
</c:forEach>
</cssleftNav
请帮忙。我现在已经有一段时间了。
答案 0 :(得分:0)
您的数据模型很奇怪。您似乎有松散的${categories}
和${subcategories}
,它们之间没有相互参照。
您需要确保它们互相引用。最终,你最终会喜欢这样的东西:
<ul>
<c:forEach items="${categories}" var="category">
<li>
<a href="category?id=${category.id}">${category.name}</a>
<ul>
<c:forEach items="${category.categories}" var="subcategory">
<li>
<a href="category?id=${subcategory.id}">${subcategory.name}</a>
</li>
</c:forEach>
</ul>
</li>
</c:forEach>
</ul>
这需要一个类似的模型:
public class Category {
private Long id;
private String name;
private List<Category> categories;
// ...
}
拥有rows
属性顺便说一句也很奇怪。 ${categories}
应该只是您从数据库中获取的List<Category>
。