Thymeleaf if + 每个订单

Thymeleaf if + each order

我正在执行以下操作:

<p th:if="${foo != null}" th:each="row : ${foo.values().iterator().next().rowKeySet()}">

foojava.util.Map.

的实例
Thymeleaf throws an `TemplateProcessingException: 
Exception evaluating SpringEL expression: "foo.values().iterator().next().value.rowKeySet()"` with root cause `SpelEvaluationException: EL1011E:(pos 22): 
Method call: Attempted to call method values() on null context object`.

为什么 Thymeleaf 在 th:if 的结果是 false 时处理 th:each 以及如何解决它?

这是我目前的肮脏解决方法:

<p th:if="${foo != null}" th:each="row : ${foo != null ? foo.values().iterator().next().rowKeySet() : null}">

Thymeleaf 在 th:if 之前处理 th:each 因为定义了属性优先级,它建立了评估标签的顺序,这在 here.

中进行了解释

作为一项工作,您可以包装 th:each 表达式,例如:

<div th:if="${foo != null}">
    <p th:each="row : ${foo.values().iterator().next().rowKeySet()}">
    ...

我不知道您的工作环境,但作为参考,您可以使用 Thymeleaf (docs) 轻松迭代地图。