2009-07-10 19 views
9

all. Necesito usar Java 5 enumeración en la plantilla de velocidad, por lo que podría escribir algo así comoUsando Java 5 enumeraciones como Velocity variables

 
public enum Level{ 
    INFO, ERROR; 
} 

Velocity template: 

#if($var == Level.INFO) 
... 
#else 
... 
#end 

¿Cómo puede hacerse esto? Gracias por adelantado.

+0

Dependiendo de lo que haga su if ... else .. en realidad. Además, si esto es solo 1 tipo o muchas operaciones diferentes. http://stackoverflow.com/questions/859563/java-enums-and-switch-statements-the-default-case puede ser útil. – bryantsai

Respuesta

3

No es bonito, pero una solución alternativa sería (manualmente) colocar las constantes de enumeración que necesita en el contexto de Velocity.

request.setAttribute('level_info', Level.INFO); 
request.setAttribute('level_error', Level.ERROR); 

Entonces se podría decir

#if ($var == $level_info) 

Quizás más fácil: Sólo tiene que utilizar el toString() de la instancia de enumeración

#if ("$var" == 'INFO') 
+0

Solo me pregunto, ¿es esto realmente diferente? – bryantsai

+0

@bryantsai: La segunda versión también será verdadera si $ var contiene algún otro objeto que se imprime como INFO, como una cadena. Sin embargo, es poco probable que esto sea un problema. – Thilo

+0

+1 para la segunda versión –

16

En realidad, en lugar de método sería mejor utilizar toString() name(), ya que devuelve exactamente el valor de enum y es final, por lo tanto, no puede ser anulado en el futuro. Por lo tanto en la velocidad se puede usar algo como

 
#if($var.name() == "INFO") 
6

A partir de la velocidad 1.5, si los dos elementos que se comparan con == son de diferentes clases, lo hace automáticamente un toString() en ambos. Así que intente

#if($var == "INFO") 
Cuestiones relacionadas