我有一个应用程序,其中有两个实体,它们具有双向的一对多关系。车主和自行车
所以通过curl得到所有者
[
{"id":1,
"userName":"user1",
"bicycles":
[
{
"id":1,
"make":"dawes",
"model":"civic",
"owner":1
}
]
},
{"id":2,
"userName":"user2",
"bicycles":
[
{
"id":2,
"make":"whyte",
"model":"montpellier",
"owner":2
}
,{
"id":4,
"make":"dahon",
"model":"tern A7",
"owner":2
}
]
} ]
这没什么
如果我创建一个在表格中循环的模板,
<table>
<tr th:each="owner : ${owners}">
<td th:text="${owner.userName}"></td>
<td th:text="${owner.bicycles[0].make}"
th:if="${#lists.size(owner.bicycles)} > 0">"</td>
<td th:text="${owner.bicycles[0].model}"
th:if="${#lists.size(owner.bicycles)} > 0"></td>
</tr>
</table>
然后我在浏览器中得到预期的结果。我知道上面的代码很糟糕,但我现在只想让thymeleaf工作。
但如果我执行以下代码
<table>
<tr th:each="owner : ${owners}">
<td th:text="${owner.userName}"></td>
<tr th:each="bike : ${owner.bicycles}">
<td th:text="${bike.make}"></td>
<td th:text="${bike.model}"></td>
</tr>
</tr>
</table>
然后我得到下面的控制台错误
嵌套异常为org.thymeleaf.exceptions。TemplateProcessingException:计算SpringEL表达式时出现异常:“owner.bicycles”(模板:“nutsthymeleaf”-第23行,第15栏)],并注明根本原因
org.springframework.expression.spel.SpelEvaluationException:EL 1007 E:在null上找不到属性或字段“bicycles”
我发现令人困惑的是,业主.自行车[索引]工作。上面有品牌和型号。然而,根据错误,owner.bicycles似乎是一个空字段。
很明显,我做错了什么……
3条答案
按热度按时间gwo2fgha1#
所以我找到了这个
Thymeleaf: Getting Property or field cannot be found on null. Iteration of list inside a list
这就停止了SpelException。
玩过之后,它不需要3个级别,只需要两个。如果th:each嵌套在th:each中,则会出现问题。第二个th:each必须在th:块中(也可能是div)。
plicqrtu2#
尝试
if
检查bicycles
是否为 nullvs3odd8k3#
问题似乎是您试图通过嵌套表行
<tr>
元素来生成无效的HTML。要生成您想要的HTML,您应该使用syntethic
th:block
标记,它允许您为每辆自行车生成单元格。