В настоящее время я делаю веб-сайт с рассылкой новостей. Я хочу публиковать и показывать комментарии под каждым постом.
МОЙ ПОСТ
Я умею динамически создавать элементы в цикле с одним уровнем вложенности. Но как я могу создать множественную вложенность?
Например, я могу создавать комментарии:
<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>
Я думаю, вам придется сделать это с фрагменты. Например, с таким объектом:
Объекты
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>