速度:$ display.list()およびオブジェクトのコレクション
質問
Velocity DisplayToolには便利なメソッドがあります:
$display.list($list)
これは、コレクションまたは配列を「A、B、C」の形式にフォーマットします。
問題は、オブジェクトのArrayListがあるということです。オブジェクト全体ではなく、特定のオブジェクトフィールドを出力するにはどうすればよいですか。 たとえば、通常のループは次のようになります。
#foreach($obj in $list)
${obj.title}
#end
今のところ、obj.titleを返すようにobj.toString()を作成しましたが、別のフィールドが必要な場合はどうなりますか?
ありがとう。
UPDATE このメソッドを自分で実装し、DisplayToolsにコミットしました。したがって、現在はTools 2.0の一部です。
解決
これをサポートするために、DisplayToolを拡張することを検討してください。 SortToolを見ると、プロパティでソートできます。そこからコードをコピーすると、DisplayToolにこれを追加するための良いスタートが切れるはずです。そして、あなたがこれをして共有したいと思ったら、dev @ velocity.apache.orgリストで私たちに知らせてください。ええ、もし私がいつか退屈したら、私は自分でこれをするかもしれません。
他のヒント
つまり、「title1」、「title2」、「title3」などのフォーマットされた文字列になりたい場合、各要素は、たとえばBookオブジェクトのリストのタイトルプロパティです。 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)
これがお役に立てば幸いです。