toString以外のものを使用してオブジェクトをレンダリングするために速度を設定しますか?
質問
テンプレート内のオブジェクトを文字列に変換すること)のtoString(以外のものを使用するように速度を設定する方法はありますか?例えば、私はフォーマット()メソッドを持つ単純な日付クラスを使用している、と私は同じ形式を毎回使用しているとします。
:私の速度のすべてのコードは次のようになります場合は$someDate.format('M-D-yyyy')
それは私がちょうど言わせます、私は追加することができますいくつかの設定があります。
$someDate
の代わりに? (私はちょうど日付クラスを編集して)(それに該当するのtoStringを与える立場にはないよと仮定)。
それは場合に役立ちます。私は、WebWorkので構築されたWebアプリケーションのコンテキストでこれをやってます。
解決
また、あなたの日付を監視し、自動的にあなたのための書式設定を行い、独自のReferenceInsertionEventHandlerを作成することができます。
他のヒント
速度は、Velocimacroのと呼ばれるユーティリティなどのJSTLを可能にします:
http://velocity.apache.org/engine/devel /user-guide.html#Velocimacrosする
これはあなたのようなマクロを定義することができるようになります
#macro( d $date)
$date.format('M-D-yyyy')
#end
そして、そのようにそれを呼び出します:
#d($someDate)
ああ、と速度の1.6+のバージョンでは、新しいレンダリング可能インターフェースを持っています。あなたは速度APIへのあなたの日付クラスを結ぶ気にしない場合は、このインタフェースを実装し、(代わりのtoStringの速度は、レンダリング(文脈、作家)メソッドを使用します(あなたのケースのために、あなただけの文脈を無視して、ライターを使用) )。
私もこの問題に直面し、私は<のhref = "https://stackoverflow.com/questions/375128/configure-velocity-to-render-an-object-with-something-に基づいてそれを解決することができました他の-より-のtoString / 505297#505297" >ネイサンBubna回答するます。
私はちょうどにリンクを提供する答えを完了しようとしていますEventHandlerを使用する方法について説明し、速度のドキュメントでます。
私の場合、私はgsonライブラリのすべてのJsonPrimitiveオブジェクトのための代わりにtoStringメソッドの参照が挿入されたことを毎回「getAsString」ベロシティ・コールを必要としていました。
これは
を作成するのと同じくらい簡単でしたpublic class JsonPrimitiveReferenceInsertionEventHandler implements ReferenceInsertionEventHandler{
/* (non-Javadoc)
* @see org.apache.velocity.app.event.ReferenceInsertionEventHandler#referenceInsert(java.lang.String, java.lang.Object)
*/
@Override
public Object referenceInsert(String reference, Object value) {
if (value != null && value instanceof JsonPrimitive){
return ((JsonPrimitive)value).getAsString();
}
return value;
}
}
とのVelocityContextにイベントを追加
vec = new EventCartridge();
vec.addEventHandler(new JsonPrimitiveReferenceInsertionEventHandler());
...
context.attachEventCartridge(vec);