ベロシティでネストした繰り返し
プログラミングでは、 Velocity テンプレートのネストした反復処理を実装するために、ネストした反復処理を使用することができます。Velocity テンプレート エンジン自体はネストした反復処理の構文をサポートしていませんが、再帰を使用するか、ネストしたデータ構造を使用すると、ネストした反復処理をシミュレートして実装することができます。
再帰を使用して入れ子ループを作成する方法を示す例を次に示します。
#macro(loop $list)
#foreach($item in $list)
#if($item.children)
#loop($item.children)
#end
$item
#end
#end
#set($data = [
{ "name": "A", "children": [
{ "name": "A1" },
{ "name": "A2", "children": [
{ "name": "A2.1" },
{ "name": "A2.2" }
]}
]},
{ "name": "B" },
{ "name": "C", "children": [
{ "name": "C1" },
{ "name": "C2" }
]}
])
#loop($data)
上記の例では、loopというマクロを定義し、リストを引数にしています。マクロの中では、#foreachディレクティブを使ってリストの要素を一つずつ回しています。要素にchildren属性があれば、ループマクロを再帰的に呼び出して、子要素を処理しています。最後に、各要素の名前を出力しています。
なお、あくまでサンプルなので、実際には具体的なユースケースに応じて適宜変更が必要になる場合があります。さらに、循環ネストをエミュレートするために、入れ子構造のデータ構造(入れ子になったMapやListなど)を使用することもできます。