operator concatenate array java freemarker

java - concatenate - Freemarker: una enumeración en una declaración if



freemarker module (3)

En mi declaración if, quiero comparar una variable, que es una enumeración JDK 1.5, con un enum literal. Por ejemplo:

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

Pero me sale esta excepción:

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)

¿Cómo puedo hacer eso?


Desafortunadamente, el lenguaje FreeMarker no tiene el concepto de clases ... pero puedes hacer esto:

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

O si confía en el toString() para el tipo de enumeración, la parte .name() se puede omitir.


He utilizado algo como esto con éxito (en java 1.6 y 1.7, no he probado 1.5):

<#if type?? && statics["com.your.package.ContainingClass$TypeEnum"].BEST_SOLUTION_CHANGED.equals(type)> Do some freemarker or HTML here </#if>

Esto es con enumeración dentro de otra clase como:

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

Y la variable de tipo se define en java algo como:

TypeEnum type = TypeEnum.BEST_SOLUTION_CHANGED;


Si desea comparar enumeraciones, debe especificar un valor de enumeración constante entre comillas dobles como:

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