从Java树创建html嵌套列表

时间:2013-02-19 23:58:25

标签: java html jsp recursion jstl

我正在开发一个学校项目,这是一个销售点系统。它适用于resturants。 “经理”可以创建一个菜单,其中包含尽可能多的嵌套类别,最终类别将包含项目。我已经在java中创建了这个类别树。它与计算机的目录基本相同。我打算在他们想要查看菜单时从数据库中填充树。它是一个Web应用程序,所以我需要将此树表示为html嵌套列表。我一直在使用JSP / JSTL从数据对象构建页面,所以我希望在构建后将树传递给JSP,然后以某种方式遍历它并插入正确的html甚至在Java中编写代码来编写巨大的HTML字符串,只是提供。

我无法绕过头脑,因为我对jsp / jstl很新,并且正在寻找有关最佳方法的建议。

2 个答案:

答案 0 :(得分:2)

如果您不知道信息嵌套的深度,可以使用递归。

定义一个名为node.jsp的jsp页面,它将以递归方式调用:

<li>
   ${node.value}
   <c:if test="${fn:length(node.children) gt 0}">
      <ul>
         <c:forEach var="node" items="${node.children}">
           <c:set var="node" value="${node}" scope="request" />
           <jsp:include page="node.jsp" />
         </c:forEach>
      </ul>
   </c:if>
</li>

在您的主页面中,您只需使用树的根初始化节点,并包含node.jsp

                     

答案 1 :(得分:1)

假设树存储在一个以递归方式实现子对象列表的类中,那么您可以使用JSTL foreach标记以嵌套方式迭代:

<c:forEach items="${root.children}" var="parentItem">    
    <c:forEach items="${parentItem.children}" var="childItem">    
        <c:forEach items="${childItem.children}" var="grandchildItem"> 
        </c:forEach>
    </c:forEach>
</c:forEach>

当然,这假设这些对象中的每一个都有一个名为getChildren()的方法,以便它可以工作。您只需要在servlet中将根对象传递给JSP页面:

request.setAttribute("root", root);