2009-07-10 7 views
9

all。私はそれを行うことができますどのようにベロシティ変数としてJava 5 enumを使用する

 
public enum Level{ 
    INFO, ERROR; 
} 

Velocity template: 

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

ような何かを書くことができるように、私は、VelocityテンプレートでJava 5列挙型を使用する必要がありますか?前もって感謝します。

+0

もしあなたが実際に何をしているかによって。また、これが1種類だけであるか、それとも多くの異なる操作であるか。 http://stackoverflow.com/questions/859563/java-enums-and-switch-statements-the-default-caseが役立つ可能性があります。 – bryantsai

答えて

3

しかし、回避策の1つは、(手動で)必要な列挙定数をVelocityコンテキストに配置することです。ただ、実際には、代わりのtoString()メソッドでそれを使用する方がよいでしょう

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

これは本当に違いますか? – bryantsai

+0

@bryantsai:$ varがINFOとして出力する他のオブジェクト(Stringなど)を保持している場合、2番目のバージョンも真です。しかし、これは問題になるとは思わない。 – Thilo

+0

+1の2番目のバージョン –

16

あなたの列挙型のインスタンスのtoString()を使用します。

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

次に、あなたは簡単にたぶん

#if ($var == $level_info) 

を言うことができますname()はenumの値を正確に返して最終的なものであるため、将来は上書きすることはできません。だから、速度にあなたは==と比較される2つの項目が異なるクラスである場合、それは自動的に両方の上で()のtoStringを行い、速度1.5のとおり

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

のようなものを使用することができます。だから試してみてください

#if($var == "INFO") 
関連する問題