23

私のifステートメントでは、JDK1.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()または、列挙型のを信頼する場合は、その.name()部分を省略できます。

于 2012-09-14T13:55:32.587 に答える
2

列挙型を比較す​​る場合は、次のように、一定の列挙型の値を二重引用符で囲んで指定する必要があります。

<#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 に答える