Java Freemarker:if语句中的枚举

Java Freemarker:if语句中的枚举,java,freemarker,Java,Freemarker,在if语句中,我想将一个变量(JDK1.5Enum)与一个enum文本进行比较。例如: <#if type == ProblemStatisticType.BEST_SOLUTION_CHANGED> ... </#if> 如何进行比较?如果要比较枚举,应使用双引号指定常量枚举值,如: <#if type == "BEST_SOLUTION_CHANGED"> ... </#if> ... 不幸的是,FreeMarker语言没有类的概

在if语句中,我想将一个变量(JDK1.5Enum)与一个enum文本进行比较。例如:

<#if type == ProblemStatisticType.BEST_SOLUTION_CHANGED>
  ...
</#if>

如何进行比较?

如果要比较枚举,应使用双引号指定常量枚举值,如:

<#if type == "BEST_SOLUTION_CHANGED">
  ...
</#if>

...

不幸的是,FreeMarker语言没有类的概念。。。但你可以这样做:

<#if type.name() == "BEST_SOLUTION_CHANGED">
  ...
</#if>

...

或者,如果您信任枚举类型的
toString()
,则可以省略
.name()
部分。

我成功地使用了类似的方法(在java 1.6和1.7中,没有尝试过1.5):

类型变量在java中定义如下:

TypeEnum type = TypeEnum.BEST_SOLUTION_CHANGED;

这是可行的,但不利于重构。如果枚举覆盖了toString()方法怎么办?您还可以使用@ControllerAdvice类,并指定一个ModelAttribute方法,将枚举添加到模型中
<#if type?? && statics["com.your.package.ContainingClass$TypeEnum"].BEST_SOLUTION_CHANGED.equals(type)>
  Do some freemarker or HTML here
</#if>
class ContainingClass {
   public enum TypeEnum {
    WORST(0),
    BEST_SOLUTION_CHANGED(1);

    private int value;

    private TypeEnum(int value) {
      this.value = value;
    }

    public int value() {
      return this.value;
    }
  };  
}
TypeEnum type = TypeEnum.BEST_SOLUTION_CHANGED;