Velocity:$ display.list()和一组对象

时间:2008-12-02 17:36:18

标签: java velocity

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 个答案:

答案 0 :(得分:4)

所以你想得到一个像“title1,title2和title3”这样的格式化字符串,其中每个元素都是Book对象列表的title属性?我想到了两种方法:

1)手动自己构建标题列表,然后将其移交给$ display.list()。 。E.g,:

#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 :(得分:1)

您可以考虑扩展DisplayTool以支持此功能。看一下SortTool,它允许您对属性进行排序。从那里复制代码应该为您提供一个良好的开端,将其添加到DisplayTool。如果您这样做并想分享,请通过dev@velocity.apache.org列表告诉我们。哎呀,如果有一天我很无聊,我可能会自己这样做。