Скорость: $ display.list () и коллекция объектов - PullRequest
2 голосов
/ 02 декабря 2008

Velocity DisplayTool имеет полезный метод:

$display.list($list)

Это отформатирует коллекцию или массив в форму "A, B и C".

Проблема в том, скажем, у меня есть ArrayList объектов, как мне вывести поле определенного объекта вместо всего объекта? Например, обычный цикл будет выглядеть так:

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

Пока я только что сделал obj.toString () для возврата obj.title, но что если мне понадобится другое поле?

Спасибо.

ОБНОВЛЕНИЕ Закончил сам реализовывать этот метод и фиксировать его в DisplayTools. Теперь это часть Tools 2.0.

Ответы [ 2 ]

4 голосов
/ 07 декабря 2008

Итак, вы хотите получить отформатированную строку, такую ​​как «title1, title2 и title3», где каждый элемент является свойством title списка, скажем, объектов Book? На ум приходят два подхода:

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)

Надеюсь, это поможет.

1 голос
/ 03 февраля 2009

Возможно, вы захотите расширить DisplayTool для поддержки этого. Взгляните на SortTool, он позволяет вам сортировать по свойствам. Копирование кода оттуда должно дать вам хорошее начало для добавления этого в DisplayTool. А если вы сделаете это и захотите поделиться, сообщите нам об этом в списке dev@velocity.apache.org. Черт возьми, если мне когда-нибудь надоест, я мог бы сделать это сам.

...