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>