もしこのブログがお役に立ちましたら、次回のAmazonでのお買い物時に こちらのリンクから 購入していただけますと嬉しく思います。

2010年11月17日

Velocityの変数名を動的に定義する

Apache Velocityで変数名は通常以下のように定義します。
(例の中の$listはjava.util.Listのインスタンスです)

#set($fruit0 = $list.get(0))
#set($fruit1 = $list.get(1))
#set($fruit2 = $list.get(2))


上の例のように、同じ種類の変数名がほぼ一緒の場合、何としてでもループ構文で書きたくなるのがプログラマの性です。
ただし、Velocityでは以下のようには記述できません。

#foreach($num in [0..2])
#set($fruit$num = $list.get($num))
#end


上の場合、「$fruit$num」という書き方が変数として認められないため、エラーが出ます。

ではどうしたら良いのかというと、以下のようにすれば解決できます。

#foreach($num in [0..2])
$request.setAttribute("fruit$num", $list.get($num))
#end


数ヶ月間ずっと悩んでいたのですが、意外と簡単に解決できてびっくりです。