比较百里香的枚举常数

use*_*455 37 java spring thymeleaf

我有一个枚举,Constants:

enum Constants {
    ONE,TWO,THREE;
}
Run Code Online (Sandbox Code Playgroud)

如何比较Thymeleaf中的枚举常量.

谢谢.

Nic*_*ick 75

要与枚举常量进行比较,请使用以下代码:

th:if="${day == T(my.package.MyEnum).MONDAY}"
Run Code Online (Sandbox Code Playgroud)

  • @TimBüthe这是访问类级别(静态)字段或方法的操作符,是SpEL(Spring Expression Language)的一部分.有关详细信息,请参阅类型部分(http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html#expressions-types). (5认同)

Tac*_*aGT 35

还有一种方法:

th:if="${constant.name() == 'ONE'}"
Run Code Online (Sandbox Code Playgroud)

它更短但与字符串表示相比,在重构时可能会导致问题.

  • @tibi即使您的IDE不支持模板重构(IntelliJ Idea,我认为支持),如果您使用Nick的答案,您将在页面渲染期间检查枚举值。在这种情况下 - 不是,这是较短形式的价格。 (2认同)

geo*_*all 8

@Nick的答案有一个小的语法错误,它缺少最后一个大括号.它应该是

th:if="${day == T(my.package.MyEnum).MONDAY}"
Run Code Online (Sandbox Code Playgroud)

  • 请在您所指的答案下发布此类评论信息,而不是另外的答案.只有当答案本身回答问题时才发布答案(你可以考虑你的答案是否可以改写为正确的答案,尽管我认为可能不是). (5认同)

use*_*455 6

th:if="${#strings.toString(someObject.constantEnumString) == 'ONE'}">
Run Code Online (Sandbox Code Playgroud)


Pau*_*Pau 5

另一种选择是在开关中使用枚举的方法name()。一个例子是:

  <th:block th:switch="${imageType.name()}>
     <span th:case="'ONE'"></span>
     <span th:case="'TWO'"></span>
     <span th:case="'THREE'"></span>
  </th:block>
Run Code Online (Sandbox Code Playgroud)

它类似于带有ENUM的Java Switch,而不是类似${day == T(my.package.MyEnum).MONDAY}${#strings.toString(someObject.constantEnumString) == 'ONE'}看起来很奇怪的其他答案。