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 and title3”这样的格式化字符串,其中每个元素都是一个列表的标题属性,比如说,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)

希望这可以帮助。

于 2008-12-06T23:51:12.907 回答
2

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

于 2009-02-02T23:04:03.080 回答