【问题标题】:Thymeleaf recursion not workingThymeleaf 递归不起作用
【发布时间】:2015-04-22 03:24:18
【问题描述】:

我正在尝试使用 Thymeleaf 创建一个递归列表。我正在使用一个简单的 Java 对象来对具有两个字段、一个描述和一个子节点数组列表的节点进行建模。我正在使用以下 HTML/Thymeleaf 来处理结构,但它不会递归迭代到下一个级别。

我的 Java 代码如下所示:

public class Node {
    public String description;
    public ArrayList<Node> children;
}

我的 Thymeleaf/HTML 代码如下:

<html>
    ...
    <body>
        <div th:fragment="fragment_node" th:remove="tag">
            <ul th:if="${not #lists.isEmpty(node.children)}" >
                <li th:each="child : ${node.children}"
                    th:text="${child.description}"
                    th:with="node = ${child}"
                    th:include="this::fragment_node">List Item</li>
            </ul>
        </div>

    </body>
</html>

如果我的数据结构如下所示:

  • 主节点 1
    • 子节点 1
    • 子节点 2
  • 主节点 2
    • 子节点 3
    • 子节点 4

我希望得到:

<ul>
    <li>Main Node 1</li>
    <li>
        <ul>
            <li>Child node 1</li>
            <li>Child node 2</li>
        </ul>
    </li>
    <li>Main Node 2</li>
    <li>
        <ul>
            <li>Child node 3</li>
            <li>Child node 4</li>
        </ul>
    </li>
</ul>

但是,我只得到:

<ul>
    <li>Main Node 1</li>
    <li>Main Node 2</li>
</ul>

谁能发现为什么这可能不起作用?

【问题讨论】:

  • 有孩子吗?你有没有尝试简化一点?尝试提取 li 中的包含并将以下内容放入 &lt;div th:with="child = ${child}" th:include="this::fragment_node" th:remove="tag" /&gt;

标签: html thymeleaf


【解决方案1】:

问题的原因是

您正在尝试 th:text 并尝试将描述添加到 &lt;li&gt; 以及您正在尝试 th:include 同一标记内的片段 &lt;li&gt;

您的th:includeth:text 替换,因为th:text 默认优先处理。

直接解决您的源代码

 .....
 <li th:each="child : ${node.children}" th:inline="text" th:with="node = ${child}">
      [[${child.description}]]
      <ul th:replace="this::fragment_node">List Item</ul>
 </li>
 .....

即使认为上述内容可以如您所愿,我个人在您的 thymeleaf 页面中也发现了一些设计问题。

使用片段参数的更好解决方案

 ...
 <ul th:fragment="fragment_node(node)" th:unless="${#lists.isEmpty(node.children)}" >
     <li th:each="child : ${node.children}" th:inline="text">
         [[${child.description}]]
         <ul th:replace="this::fragment_node(${child})"></ul>
     </li>
 </ul>
 ...

【讨论】:

    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多