速度:$ display.list()およびオブジェクトのコレクション

StackOverflow https://stackoverflow.com/questions/334786

  •  22-07-2019
  •  | 
  •  

質問

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)

これがお役に立てば幸いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top