VTL で配列を作成し、内容を配列に追加する方法は? また、配列の内容をインデックスで取得する方法は?
3 に答える
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 は "追加」機能。
簡単な回避策は、add 関数の結果を変数に代入することです。
#set($bar = $foo.add(42))
インデックス番号を使用してリストの要素にアクセスできます。
<span>$foo[1]</span>
上記の式は、テキスト「a string」を含むスパンを示します。ただし、リストの要素にアクセスする最も安全な方法は、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 次元配列に配置するという回避策を使用しました。