2009-07-10 9 views
9

all. Je dois utiliser Java 5 ENUM dans le modèle de vitesse, de sorte que je pouvais écrire quelque chose commeUtilisation de Java 5 enums comme variables de vitesse

 
public enum Level{ 
    INFO, ERROR; 
} 

Velocity template: 

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

Comment peut-il être fait? Merci d'avance.

+0

Selon ce que votre if .. else .. fait réellement. Aussi, si ce n'est que 1 genre ou plusieurs opérations différentes. http://stackoverflow.com/questions/859563/java-enums-and-switch-statements-the-default-case pourrait être utile. – bryantsai

Répondre

3

Pas joli, mais une solution de contournement serait de placer (manuellement) les constantes enum dont vous avez besoin dans le contexte Velocity.

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

Ensuite, vous pouvez dire

#if ($var == $level_info) 

Peut-être plus facile: Il suffit d'utiliser le toString() de votre instance ENUM

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

Je me demandais, est-ce vraiment différent? – bryantsai

+0

@bryantsai: La deuxième version sera également vraie si $ var contient un autre objet qui imprime comme INFO, comme une chaîne. Peu probable que cela va être un problème, cependant. – Thilo

+0

+1 pour la deuxième version –

16

En fait, au lieu de la méthode toString(), il serait préférable d'utiliser name(), car il retourne exactement la valeur de enum et est final, donc ne peut pas être remplacé à l'avenir. Ainsi, la vitesse, vous pouvez utiliser quelque chose comme

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

Au Velocity 1.5, si les deux éléments comparés avec == sont de différentes classes, il fait automatiquement un toString() sur les deux. Donc, essayez

#if($var == "INFO") 
Questions connexes