Freemarker:if语句中的枚举

时间:2012-09-14 09:51:01

标签: java freemarker

在我的if语句中,我想将一个JDK 1.5枚举变量与枚举文字进行比较。例如:

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

但我得到了这个例外:

freemarker.core.InvalidReferenceException: Expression ProblemStatisticType is undefined on line 430, column 87 in index.html.ftl.
at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125)
at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:135)

我该怎么做?

3 个答案:

答案 0 :(得分:22)

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

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

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

答案 1 :(得分:2)

如果要比较枚举,则应在双引号中指定常量枚举值,如:

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

答案 2 :(得分:1)

我已成功使用过这样的东西(在java 1.6和1.7中,还没试过1.5):

<#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;
    }
  };  
}

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

TypeEnum type = TypeEnum.BEST_SOLUTION_CHANGED;