4. VTL・#foreach
2005.12.21 株式会社四次元データ 里見玲爾
- 4.1. #foreach
3章に引き続き、この章ではVTLの指示子について解説します。
4章では、#foreach指示子について解説します。
4.1. #foreach
#foreachは繰り返し処理を行うための指示子です。 オブジェクトのリストを使ってループさせます。
#foreach( $object in $list) [ 出力 ] #end
$listの中にある$objectに対して、[出力]内の処理が実行されます。 $objectはリストの項目で、$listはオブジェクト配列、Map、コレクション、配列リスト、範囲演算子のいずれかです。 配列リストと範囲演算子はVelocity特有のもので、配列リストとは
["four", $dimensional, "data"]
のようにデータを配列のように列挙するもので、範囲演算子とは
[1..8]
のように数字の範囲を表すリストです。
またMapを記述した場合、Velocity内でvalues()メソッドが使われ格納されている値のリストを取得することになります。
ループの中でループの回数を取得することができ、それには$velocityCountを記述します。 デフォルトではループのカウントは1から始まり、設定ファイルであるvelocity.propertiesファイルで velocityCountの名前やデフォルトの値を変更できます。
たとえばHumanクラスはプロパティとしてnameのみを持っているものとして、 LinkedListのインスタンスであるgroupにHumanオブジェクトを格納することにします。 マージするsample.vmファイルを以下に示します。
sample.vm
#foreach($human in $group) $velocityCount : $human.name #end
次にControlクラスを簡単に示します。
control.java
(略) Human humanA = new Human("四次元太郎"); Human humanB = new Human("四次元次郎"); Human humanC = new Human("四次元三郎"); LinkedList group = new LinkedList(); group.add(humanA); group.add(humanB); group.add(humanC); try{ (略) VelocityContext context = new VelocityContext(); context.put("group",group); StringWriter sw = new StringWriter(); Template tem = Velocity.getTemplate("sample.vm"); tem.merge(context, sw); (略)
このようにマージすると、次のように出力されます。
1 : 四次元太郎 2 : 四次元次郎 3 : 四次元三郎
次の章では、#parse、#include、#stop、#macroについて解説します。