Spring Boot Application - 如何根据当前对象将数据(列表中的列表)从控制器传递给Thymeleaf?

时间:2017-08-07 21:14:00

标签: html spring-mvc spring-boot thymeleaf

我在Spring Boot应用程序中处理Thymeleaf模板。我正在我的控制器中正确获取数据,但我不知道如何继续我的模板。我有一个与用户相关的摘要表,用户可以有很多摘要。每个摘要项都可以有一个注释。每个摘要可以有很多笔记。

更好的做法是在摘要表中包含注释ID(某些摘要项可能不包含注释)或者因为我在控制器中正确获取数据,我的模板的逻辑是关闭的?

这就是我在控制器中获取数据的方式:

modelAtt.addObject("sumList", summaryService.getList(currentUser));

List<Notes> note = notService.getList(summary.getId());
modelAtt.addObject("noteList", note);

这就是我试图在我的模板中循环的方式(而不是每个摘要显示一个注释我显示当前注释但在用户所有的每个摘要项目下而不是在注释所属的摘要下):

<div th:if="${not #lists.isEmpty(sumList)}">
  <div th:each="sum : ${sumList}">
    <tr>
      <th>Summary</th>
    </tr>
    <td th:text="${sum.description}"></td>
    <div th:if="${not #lists.isEmpty(noteList)}">
      <tr>
        <th>Description</th>
      </tr>
      <tr th:each="note : ${noteList}">
        <td th:text="${note.description}"></td>
      </tr>
    </div>
  </div>
</div>

非常感谢任何帮助或建议,谢谢!

编辑

Service上课:

public List<Summary> getList(User user) {
    return summaryRepository.summaryByUser(user);
}

public List<Note> getList(int id) {
    Summary summary = summaryService.findOne(caseId);
    return noteRepository.noteBySum(summary);
}

Repo上课:

@Query("select a from summary a where a.user = ?1")
List<Summary> summaryByUser(User user);

@Query("select a from note a where a.summary = ?1")
List<Note> noteBySum(Summary summary);

1 个答案:

答案 0 :(得分:0)

编辑:我认为在检查您的修改后第一次我的问题出错了。那么每个摘要都有一个注释列表?在将数据传递给Thymeleaf模板时,需要将每个摘要与Notes列表相关联。您可以通过使用JPA关联(@OneToMany)或稍微更改您的控制器代码来执行此操作,以返回地图而不是列表。

List<Summary> summaryList = summaryService.getList(currentUser));
Map<Integer,List<Note>> noteListMap = new HashMap<>();
for (Summary summary : summaryList) {
    noteListMap.put(summary.getId(),noteService.getList(summary.getId()))
}
modelAtt.addObject("sumList", summaryList);
modelAtt.addObject("noteListMap", noteListMap);

然后你的模板可能是

<div th:if="${not #lists.isEmpty(sumList)}">
<div th:each="sum : ${sumList}">
    <tr>
        <th>Summary</th>
    </tr>
    <td th:text="${sum.description}"></td>
    <div th:if="${not #lists.isEmpty(noteListMap[__${sum.id}__])}">
          <tr>
             <th>Description</th>
          </tr>
        <tr th:each="note : ${noteListMap[__${sum.id}__])}">
            <td th:text="${note.description}"></td>
        </tr>
    </div>
</div>
</div>