【问题标题】:Created html nested lists from Java tree从 Java 树创建 html 嵌套列表
【发布时间】:2013-02-19 23:58:24
【问题描述】:

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

由于我对 jsp/jstl 还很陌生,并且正在寻找有关执行此操作的最佳方法的建议,因此我无法解决这个问题。

【问题讨论】:

  • 当您说“我已经在 java 中创建了这个类别树”时,这棵树是作为 bean 实现的,还是其他一些结构,什么?
  • 是普通班。它有一个子项列表,这些子项与父项属于同一类,因此它本身就是我在 html 中想要的嵌套列表的根列表。我只是找到了一些关于使用 JSTL link 进行递归的信息,不确定我是否会使用它,但如果其他人遇到这个问题,他们可能会发现该链接很有用。

标签: java html jsp recursion jstl


【解决方案1】:

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

定义一个名为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

    【讨论】:

      【解决方案2】:

      假设树存储在一个类中,该类将子对象递归地实现为对象列表,那么您可以使用 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);
      

      【讨论】:

      • 我明白这一点,但我仍然无法想象它的效果......这不需要我知道嵌套有多深吗?不过,它确实给了我另一个想法……我可以根据传入的一些信息使用 jstl“for”来生成您的代码>
      • 是的。这种逻辑不应该进入 JSP。所有的计算和对象填充都应该进入业务逻辑。一切准备就绪后,应将单个对象传递给 JSP 进行演示。
      • 好吧,这更有意义。感谢您的快速回答!
      猜你喜欢
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 2011-06-06
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多