2009-07-10 7 views
9

tutte. Ho bisogno di usare Java 5 enum nel modello di velocità, in modo da poter scrivere qualcosa di simileUtilizzo di enumerazione Java 5 come variabili di velocità

 
public enum Level{ 
    INFO, ERROR; 
} 

Velocity template: 

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

Come si può fare? Grazie in anticipo.

+0

A seconda di ciò che il tuo if .. else .. effettivamente fare. Inoltre, se questo è solo 1 tipo o molte diverse operazioni. http://stackoverflow.com/questions/859563/java-enums-and-switch-statements-the-default-case potrebbe essere utile. – bryantsai

risposta

3

Non bello, ma un modo per aggirare sarebbe (manualmente) posizionare le costanti enum di cui avete bisogno nel contesto Velocity.

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

Allora si potrebbe dire

#if ($var == $level_info) 

Forse più facile: basta usare il toString() dell'istanza enum

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

Mi chiedo solo, è davvero diverso? – bryantsai

+0

@bryantsai: la seconda versione sarà anche vera se $ var contiene qualche altro oggetto che stampa come INFO, ad esempio una stringa. Improbabile che questo sia un problema, però. – Thilo

+0

+1 per la seconda versione –

16

In realtà, invece di metodo toString() sarebbe meglio usare name(), poiché restituisce esattamente il valore di enum ed è definitivo, quindi non può essere sovrascritto in futuro. Quindi, in velocità si può usare qualcosa di simile

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

Come di Velocity 1.5, se i due elementi che vengono confrontati con == sono di classi diverse, lo fa automaticamente un toString() su entrambi. Quindi prova

#if($var == "INFO") 
Problemi correlati