web-dev-qa-db-ja.com

Velocity Template Languageで配列を作成して反復処理する

VTLで配列を作成し、配列にコンテンツを追加する方法は?また、インデックスによって配列の内容を取得する方法は?

33
raghav

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ループを使用することです。

48
Irmak Cakmak

配列の作成は簡単です:

#set($array = [])

要素を配列に入れるのも簡単です:

$array.add(23)

配列から要素を取得する方法は、Velocityのバージョンによって異なります。 Velocity 1.6では、使用する必要があります

$array.get($index)

Velocity 1.7以降では、クラシック形式を使用できます。

$array[$index]
7
Andrea Zenatti

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次元配列に配置するという回避策を使用しました。

1
Ozgur Ozturk