[英]JSTL - Dynamic dropdown/dropright menu creation in JSP, extracting data from a list (java.util.List)
MVC模式:Servlet + JSP页面。 我有一个(基本)外观的类Category
:
public class Category{
private Integer id;
private String name;
private Category parentCategory;
...
//getters and setters
}
此类应表示类别-子类别概念:一个类别可以具有多个子类别,类别不需要具有父项(顶级类别,parentCategory字段为null),如果它是子类别,则其parentCategory字段代表其父项。
在servlet中,我将所有类别从数据库提取到java.util.List对象。 然后,我将此列表附加到应用程序范围(servlet上下文),并将其转发到JSP页面。
List<Category> categories = categoryDao.findAll();
ServletContext servletContext = getServletContext();
servletContext.setAttribute("categories", categories);
现在,在JSP页面中,我有一个导航菜单,您可以在这里看到它: http : //jsfiddle.net/vvozar/tMz9A/1/ ( see menu look in jsfiddle link
)下拉菜单是HTML中简单的无序列表,并且它的子菜单是某些菜单项下的嵌套无序列表。 示例(静态):
<nav>
<!-- Navigation -->
<ul class="dropdownMenu">
<li><a href="#">Home</a></li>
<li><a href="#">Categories</a>
<ul class="droprightMenu">
<li><a href="#">All</a>
<ul class="droprightMenu">
<li><a href="#">Category 1</a>
<ul class="droprightMenu">
<li><a href="#">Category 1.1</a></li>
<li><a href="#">Category 1.2</a></li>
<li><a href="#">Category 1.3</a></li>
<li><a href="#">Category 1.4</a></li>
</ul></li>
<li><a href="#">Category 2</a></li>
<li><a href="#">Category 3</a></li>
<li><a href="#">Category 4</a></li>
</ul></li>
<li><a href="#">Manage</a></li>
</ul></li>
<li><a href="#">Profile</a>
<ul class="droprightMenu">
<li><a href="#">Login</a></li>
<li><a href="#">Register</a></li>
<li><a href="#">Edit Profile</a></li>
<li><a href="#">My Posts</a></li>
<li><a href="#">Logout</a></li>
</ul></li>
<li><a href="#">Help</a></li>
</ul>
</nav>
我想通过从列表中按照类别层次结构读取类别/子类别来(动态)创建这些菜单和子菜单。(具有相同父类别的类别属于相同的下拉菜单)。
JSTL循环应如何创建类别菜单?
您知道子菜单的最高级别吗?
我认为您应该尝试使用Scriplets和递归
我将子类别的深度级别限制为3。因此,JSTL循环是:
<li><a href="#">Categories</a>
<ul class="droprightMenu">
<li><a href="#">All</a>
<ul class="droprightMenu">
<!-- first loop, extracting categories level 1 -->
<c:forEach items="${categories }" var="catLevel1">
<c:if test="${catLevel1.getParentCategory()==null }">
<li><a href="#">${catLevel1.getName() }</a>
<!-- second loop, extracting categories level 2 -->
<ul class="droprightMenu">
<c:forEach items="${categories }" var="catLevel2">
<c:if test="${catLevel2.getParentCategory().getId()==catLevel1.getId() }">
<li><a href="#">${catLevel2.getName() }</a>
<!-- third loop, categories level 3 -->
<ul class="droprightMenu">
<c:forEach items="${categories }" var="catLevel3">
<c:if test="${catLevel3.getParentCategory().getId()==catLevel2.getId() }">
<li><a href="#">${catLevel3.getName() }</a></li>
</c:if>
</c:forEach>
</ul></li>
</c:if>
</c:forEach>
</ul></li>
</c:if>
</c:forEach>
</ul></li>
</ul></li>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.