VTLで配列を作成し、配列にコンテンツを追加する方法は?また、インデックスによって配列の内容を取得する方法は?
Apache Velocity User Guide によると、割り当ての右側は
次のような式を使用して、Apache Velocityテンプレートに空のリストを作成して、アレイのすべてのニーズを満たすことができます。
#set($foo = [])
または値を初期化します:
#set($foo = [42, "a string", 21, $myVar])
次に、Java addメソッドを使用して要素を追加します。
$foo.add(53);
$foo.add("another string");
ただし、リストタイプのJava .add()メソッドはブール値を返すため、リストに要素を追加すると、Velocityは「true」または「 「追加」機能の結果に基づいて「false」。
簡単な回避策は、add関数の結果を変数に割り当てることです。
#set($bar = $foo.add(42))
インデックス番号を使用してリストの要素にアクセスできます。
<span>$foo[1]</span>
上記の式は、テキスト「文字列」を持つスパンを示します。ただし、リストの要素にアクセスする最も安全な方法は、foreachループを使用することです。
配列の作成は簡単です:
#set($array = [])
要素を配列に入れるのも簡単です:
$array.add(23)
配列から要素を取得する方法は、Velocityのバージョンによって異なります。 Velocity 1.6では、使用する必要があります
$array.get($index)
Velocity 1.7以降では、クラシック形式を使用できます。
$array[$index]
VTLで配列を作成していませんが、VTLコンテキストに配列を渡して使用しました。 VTLでは、インデックスによって配列の内容を取得できません。foreachのみを使用します。このコードは、動的SQL生成VTLスクリプトからコピーされた例です。
#foreach( $col in $Columns ) SUM($col.DBColumn) AS ''$col.Name''#if($velocityCount!=$Columns.Count), #end #end
このため、2D配列も使用できません。行に2つのオブジェクトを格納する配列が必要な場合、新しいクラスを定義し、そのクラスのオブジェクトを1次元配列に配置するという回避策を使用しました。