2012-12-14 16 views
5

Velocity VelocityContextで値が見つからなかった場合、つまりテンプレートファイル内の$ nameはVelocityContextの "name"に値がない場合にのみタグ名を出力するので、 "$ name"だけが出力されました。変数の値がない場合、Velocityにデフォルト値を出力したいのですが、私はAbstractCotnextを拡張してinternalGet()メソッドをオーバーライドしようとしましたが、internalGet()の戻り値はNodeオブジェクトにキャストされます。私のinternalGet()メソッドで新しいNodeオブジェクトを作成する方法、またこの方法は非常に複雑だと思います。VelocityContextで値が見つからない場合、Velocityは変数のデフォルト値を設定できますか?

デフォルト値を設定する簡単な方法があります(デフォルト値は単なる文字列です)。

ありがとうございました。次のように

答えて

16

わけではありません簡単に私の知る限り見るように、すべての変数のために、私は特にいくつかの変数のためにそれを行うために管理:

テンプレート:

#if (!$somevar) 
#set ($somevar = "mycontent") 
#end 

Var is: $somevar 

結果:

Var is: mycontent 
-1

Velocityの内部をハッキングすることができないことがいくつかあります。 this questionをご覧ください。

2

Velocity ReferenceInsertionEventHandlerのためのGoogle aroundは広くそれを行う方法です。

は、個々のケースについてDisplayToolのALT()メソッド(VelocityToolsプロジェクトの一部)

+0

感謝を参照してください、と私は別の質問をすることができます:出力をレンダリングする前に、変数名を変更する方法はありますか?たとえば、変数名はテンプレートファイルのuserNameですが、VelocityContextではキーはUSERNAMEです。レンダリングの前に変数名を大文字に変更します。 – hiway

6

はテンプレートでのVelocimacroを作成して考えてみましょう:

#macro(defaultValue $parm) 
#if (!$!parm || $!parm == "") 
i-like-will 
#else 
$parm 
#end 
#end 

を、同じテンプレートでこのようにそれを呼び出す:

#defaultValue($name) 

velocimacros(および一般的な速度)の詳細については、Apache Velocity - Velocity User Guideを確認してください。

+1

なぜあなたの#の前に\記号がありますか?私はマクロとif文が#macroと#ifではないと定義していると思っていました。## –

+0

あなたは正しいですが、どのように書式が乱れているのか分かりません。私はそれを修正しました。 –

+0

ありがとう、私はそれが私が逃した特別な意味があると思った:-) –

0

少し遅れていますが、変数を定義する際にもチェックを行うことができます。私は出力に余分なスペースを削除するには1行にこれを圧縮しなければならなかったが、ここに私のプロジェクトの一つの例である:

#set ($qlDefault = "qlinks") 
#set ($qlClass = "#if($sharedCtaImage.getChild('path').value != '/')$qlDefault#else$qlDefault full#end") 

デフォルトのクラスが定義され、別の、特定の値が記入されている場合、私は確認してくださいデフォルトクラスを保持するか、追加クラスを追加するかを決定します。これはまた、クラスを交換するためにも機能します。

関連する問題