我正在尝试遍历包含另一个列表的列表。
@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>
这会导致错误:
找不到属性或字段“ id”为空
如何访问练习列表?
答案 0 :(得分:0)
您应该首先检查是否从数据库中完全读取了信息。尝试调试模型中的内容。如果该位置已经为null,那就是Hibernate问题。
我认为您从第一次迭代中获得的对象包含一个包含null元素的列表。有关在Thymeleaf中处理null的问题,请检查以下问题:Using Thymeleaf when the value is null
答案 1 :(得分:0)
问题在这里:content = [' '.join(str(y) for y in x) for x in content]
print (content)
['1 2 3', '1 2 3']
df = pd.DataFrame({'id': id, 'content': content})
print (df)
id content
0 1 1 2 3
1 2 1 2 3
。这里*{trainingSession.exercises}
为空,无法从空中找到ID。在这里,您使用exerciseWrapper
而不是*
尝试一下:
$
如果exerciseWrapper可能为空,则添加<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检查:
th:if