Как динамически создавать несколько вложенных объектов в тимелеафе

В настоящее время я делаю веб-сайт с рассылкой новостей. Я хочу публиковать и показывать комментарии под каждым постом.

МОЙ ПОСТ

  • первый комментарий
    • комментарии к первому комментарию
      • комментарии ко второму комментарию -скоро...
  • второй комментарий
  • третий комментарий

Я умею динамически создавать элементы в цикле с одним уровнем вложенности. Но как я могу создать множественную вложенность?

Например, я могу создавать комментарии:

<div class='comments' th:each = "comment : ${comments}">
  <div class='comment' th:text='comment'/>
</div>

Как я могу создать множественную вложенность?

<div class='comments' th:each = "comment : ${comments}">
  <div class='comment' th:text='comment'>
      <div class='comment' here comment to comment/>
          etc..
  </div>
</div>
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
554
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вам придется сделать это с фрагменты. Например, с таким объектом:

Объекты

class Comment {
    private String text;
    private List<Comment> children = new ArrayList<>();

    public Comment(String text, Comment... children) {
        this.text = text;
        this.children.addAll(Arrays.asList(children));
    }

    public String getText() {return text;}
    public void setText(String text) {this.text = text;}

    public List<Comment> getChildren() {return children;}
    public void setChildren(List<Comment> children) {this.children = children;}
}

Контроллер:

List<Comment> comments = new ArrayList<>();
comments.add(new Comment("hello", new Comment("nooooo")));
comments.add(new Comment("it's another comment", new Comment("again", new Comment("yeah!"))));
comments.add(new Comment("whoopity doo"));
model.put("comments", comments);

Вы можете вывести цепочку вложенных комментариев с такими фрагментами:

<th:block th:each = "comment: ${comments}">
    <div th:replace = "template :: comments(${comment})" />
</th:block>

<th:block th:if = "${false}">
    <ul th:fragment = "comments(comment)">
        <li>
            <div th:text = "${comment.text}" />

            <th:block th:unless = "${#lists.isEmpty(comment.children)}" th:each = "child: ${comment.children}">
                <div th:replace = "template :: comments(${child})" />
            </th:block>
        </li>
    </ul>
</th:block>

Другие вопросы по теме