Thymeleaf:迭代枚举值并在列表过滤器中使用它们
Thymeleaf: Iterate over enum values and use them in a list filter
我在 Thymeleaf 的列表过滤器中使用枚举值时遇到困难。
我知道如何迭代枚举值以及如何将它们与常量值进行比较。但是,我想将它与 'variable' 值进行比较。我怎样才能实现它?
在下面的示例中,我想遍历所有颜色(枚举),然后按当前颜色枚举过滤汽车列表并显示它们的名称。
如何在第二个 <div>
中正确指定列表过滤器?
<div th:each="currentColorEnum : ${T(de.my.enum.color).values()}">
<div th:each="currentCar, carStatus : ${model.carList.?[#this.colorEnum eq __${currentColorEnum}__]}">
<textarea th:field="*{carList[__${carStatus.index}__].carName}"></textarea>
</div>
</div>
当前错误信息:
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'red' cannot be found on object of type 'de.my.class.car' - maybe not public or not valid?
这种情况下不需要预处理。它失败了,因为 ${model.carList.?[#this.colorEnum eq __${currentColorEnum}__]}
解析为 ${model.carList.?[#this.colorEnum eq red]}
。这意味着它正在寻找 car.colorEnum == car.red
的汽车——因此出现错误 field 'red' cannot be found on object of type 'de.my.class.car'
.
你的 Thymeleaf 应该看起来像:
<div th:each="currentColorEnum : ${T(de.my.enum.color).values()}">
<div th:each="currentCar, carStatus : ${model.carList.?[colorEnum eq #root.currentColorEnum]}">
<textarea th:field="*{carList[__${carStatus.index}__].carName}"></textarea>
</div>
</div>
我在 Thymeleaf 的列表过滤器中使用枚举值时遇到困难。
我知道如何迭代枚举值以及如何将它们与常量值进行比较。但是,我想将它与 'variable' 值进行比较。我怎样才能实现它?
在下面的示例中,我想遍历所有颜色(枚举),然后按当前颜色枚举过滤汽车列表并显示它们的名称。
如何在第二个 <div>
中正确指定列表过滤器?
<div th:each="currentColorEnum : ${T(de.my.enum.color).values()}">
<div th:each="currentCar, carStatus : ${model.carList.?[#this.colorEnum eq __${currentColorEnum}__]}">
<textarea th:field="*{carList[__${carStatus.index}__].carName}"></textarea>
</div>
</div>
当前错误信息:
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'red' cannot be found on object of type 'de.my.class.car' - maybe not public or not valid?
这种情况下不需要预处理。它失败了,因为 ${model.carList.?[#this.colorEnum eq __${currentColorEnum}__]}
解析为 ${model.carList.?[#this.colorEnum eq red]}
。这意味着它正在寻找 car.colorEnum == car.red
的汽车——因此出现错误 field 'red' cannot be found on object of type 'de.my.class.car'
.
你的 Thymeleaf 应该看起来像:
<div th:each="currentColorEnum : ${T(de.my.enum.color).values()}">
<div th:each="currentCar, carStatus : ${model.carList.?[colorEnum eq #root.currentColorEnum]}">
<textarea th:field="*{carList[__${carStatus.index}__].carName}"></textarea>
</div>
</div>