Я пытаюсь сделать отображение сообщений на сайте из таблицы рекурсивным ... Теперь, как видно на скриншоте, работает, но в шаблоне хардкор, который отображает максимум 2 вложения, подскажите какнаписать правильную рекурсию, отобразить столько вложений, а не хардкор, как.
пример того, как это работает сейчас
таблица
template.ftl
<#list comment as msg>
<#if !msg.reply??>
<li>
${msg.message}
<ul>
<li>
<#list replyes as reply>
<#if reply.reply.toString() == msg.toString()>
${reply.message}
<#list replyes as sub_reply>
<#if sub_reply.reply.toString() == reply.toString()>
<ul>
<li>
${sub_reply.message}
</li>
</ul>
</#if>
</#list>
</#if>
</#list>
</li>
</ul>
</li>
</#if>
</#list>
Контроллер:
@GetMapping(value = "chat")
public String charPage(@AuthenticationPrincipal User user,
Map<String, Object> model) {
model.put("comment",commentRepo.findAllByMessageIsNotNullOrderById());
model.put("replyes",commentRepo.findAllByReplyIsNotNull());
return "chatmessage";
}
Репо:
public interface CommentRepo extends JpaRepository <Comment, Long> {
List<Comment> findAllByMessageIsNotNullOrderById();
List<Comment> findAllByReplyIsNotNull();
}
Объект:
@Entity
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String message;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "comment_id")
private Comment reply;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private User user;
public Comment() {
}
.....
Я пыталсянаписать макрос, но страница падает.макрос:
<#list comment as msg>
<#if !msg.reply??>
<li>
${msg.message}
<ul>
<li>
<@treeView msg, replyes/>
</li>
</ul>
</li>
</#if>
</#list>
<#macro treeView msg listReply>
<#list listReply as reply>
<#if reply.reply.toString() == msg.toString>
${reply.message}
<@ treeView reply, replyes/>
</#if>
</#list>
</#macro>
Подскажите, как написать правильный макрос или метод во Freemarkers