OGNLコレクションの射影

Struts2のOGNLでコレクションの射影を容易に作成できる

コレクション.{ 操作 }

で新しいコレクションが返される。{ }内では #thisで現在要素を参照できる。

例えば文字列のリストがあったとして、各要素の後に " ({文字列長})"のような文字列を付加したリストを作成したい場合は次のように書くことができる。

元の list1 の作成

<s:generator separator="|" val="'aaa|bb|ccc|dd|eee|fff'">
  <s:set name="list1" value="top"/>
</s:generator>

射影操作を行い結果をlist2に保存

<s:set name="list2" value="#list1.{ #this + ' ('+#this.length()+')' }"/>

結果の確認用の出力

<s:iterator value="#list2">
  [<s:property value="top"/>]
</s:iterator>

この結果は次のようになる

 [aaa (3)] [bb (2)] [ccc (3)] [dd (2)] [eee (3)] [fff (3)]