23

在我的 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)

我怎样才能做到这一点?

4

3 回答 3

32

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

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

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

于 2012-09-14T13:55:32.587 回答
2

If you want to compare enums you should specify a constant enum value in double quotes like:

<#if type == "BEST_SOLUTION_CHANGED">
  ...
</#if>
于 2012-09-14T10:08:21.477 回答
2

我已经成功使用过这样的东西(在 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;
于 2013-05-29T17:13:52.737 回答