spring-boot - Thymeleaf 嵌套对象迭代
问题描述
我正在尝试遍历包含另一个列表的列表。
@Entity
@Table(name = "session")
public class TrainingSession implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToMany(cascade = CascadeType.ALL)
private List<ExerciseWrapper> exercises;
@Column
@DateTimeFormat(pattern = "YYYY/MM/DD")
private Date sessionDate;
}
将列表添加到模型中:
@RequestMapping("/sessions")
public String getAllSession(Model model){
List<TrainingSession> trainingSessionList = trainingSessionService.getAllTrainingSessions();
model.addAttribute("sessionList", trainingSessionList);
System.out.println(trainingSessionList);
return PREFIX+"sessions";
}
迭代:
<th:block th:each="trainingSession : ${sessionList}">
<tr><td th:text="${trainingSession.id}"></td></tr>
<tr>
<th:block th:each="exerciseWrapper : *{trainingSession.exercises}">
<tr><td th:text="${exerciseWrapper.id}"></td></tr>
<tr><td th:text="${exerciseWrapper.exercise.name}"></td></tr>
</th:block>
</tr>
这会导致错误:
在 null 上找不到属性或字段“id”
如何访问练习列表?
解决方案
问题在这里: *{trainingSession.exercises}
。这里exerciseWrapper
是 null 并且无法从 null 中找到 id。在这里你使用*
而不是$
试试这个:
<th:block th:each="trainingSession : ${sessionList}">
<tr><td th:text="${trainingSession.id}"></td></tr>
<tr>
<th:block th:each="exerciseWrapper : ${trainingSession.exercises}">
<tr><td th:text="${exerciseWrapper.id}"></td></tr>
<tr><td th:text="${exerciseWrapper.exercise.name}"></td></tr>
</th:block>
</tr>
如果有可能 exerciseWrapper 为空,则添加th:if
。
使用空检查:
<th:block th:each="trainingSession : ${sessionList}">
<tr><td th:text="${trainingSession.id}"></td></tr>
<tr>
<th:block th:each="exerciseWrapper : ${trainingSession.exercises}">
<tr><td th:if="${exerciseWrapper!=null}" th:text="${exerciseWrapper.id}"></td></tr>
<tr><td th:if="${exerciseWrapper!=null}" th:text="${exerciseWrapper.exercise.name}"></td></tr>
</th:block>
</tr>
推荐阅读
- javascript - 在 React-native 上按用户类型从 Firebase 导航
- c - 如何通过引用传递动态结构以更改其大小并插入其中?
- generics - 如何从函数中返回一流模块嵌套类型的实例?
- java - 安排任务在特定时间发生(在 Java 中)
- git - 在我的本地仓库副本上运行 git reset --hard 时的奇怪行为
- java - 如何修复 Androidx 中的渲染问题,导致堆栈跟踪和空白布局预览中出现空指针异常?
- java - 应用程序语言更改默认为原始语言
- azure - 如何轻松锁定对 Azure 资源的访问?
- flutter - TextFormField 内的文本未与中心对齐 - Flutter
- material-ui - Material UI Picker:在焦点上打开 KeyboardDatePicker