2

Velocity DisplayTool には便利なメソッドがあります。

$display.list($list)

これにより、コレクションまたは配列が「A、B、および C」の形式にフォーマットされます。

問題は、オブジェクトの ArrayList があるとしましょう。オブジェクト全体ではなく、特定のオブジェクト フィールドを出力するにはどうすればよいでしょうか。たとえば、通常のループは次のようになります。

#foreach($obj in $list)
   ${obj.title}
#end

今のところ、obj.toString() で obj.title を返すようにしましたが、別のフィールドが必要になったらどうしますか?

ありがとう。

更新このメソッドを自分で実装し、DisplayTools にコミットすることになりました。そのため、現在は Tools 2.0 の一部です。

4

2 に答える 2

4

つまり、「title1、title2、title3」のような書式設定された文字列で終わる必要があります。ここで、各要素は Book オブジェクトのリストの title プロパティです。次の 2 つのアプローチが思い浮かびます。

1) 手動でタイトルのリストを作成し、それを $display.list() に渡します。例えば、:

#set($titles = [])
#foreach($obj in $list)
  $titles.add($obj.title)
#end
$display.list($titles)

2) リストから特定のプロパティを取得するための Velocity マクロを作成し、本のリストで title プロパティを使用してそのマクロを呼び出し、それを $display.list() に渡します。例えば:

#macro(retrieveProperty $list $property $newList)
  #foreach($obj in $list)
    $newList.add(${obj.${property}})
  #end
#end

#set($titles = [])
retrieveProperty($list 'title' $titles)
$display.list($titles)

お役に立てれば。

于 2008-12-06T23:51:12.907 に答える
2

これをサポートするために DisplayTool を拡張することを検討してください。SortTool を見てください。プロパティで並べ替えることができます。そこからコードをコピーすると、これを DisplayTool に追加するための良いスタートが切れるはずです。これを行って共有したい場合は、dev@velocity.apache.org リストでお知らせください。いつか退屈したら、自分でこれをやるかもしれません。

于 2009-02-02T23:04:03.080 に答える