Рекурсивный вывод в Fremarkers - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь сделать отображение сообщений на сайте из таблицы рекурсивным ... Теперь, как видно на скриншоте, работает, но в шаблоне хардкор, который отображает максимум 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

1 Ответ

0 голосов
/ 28 мая 2018

Вот хорошо работающий макрос для поиска в таблице рекурсивных записей.

   <#list comment as msg>
    <#if !msg.reply??>
        <li>
            ${msg.message}
                <@treeView msg replyes/>
        </li>
    </#if>
</#list>

<#macro treeView msg listReply>
<#list listReply as reply>
    <#if reply.reply.toString() == msg.toString()>
    <ul>
        <li>
            ${reply.message}
                <@treeView reply replyes/>
        </li>
    </ul>
    </#if>
</#list>
</#macro>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...