Velocity DisplayTool有一个有用的方法:
$display.list($list)
这会将集合或数组格式化为“A,B和C”形式。
问题是假设我有一个对象的ArrayList,如何输出特定的对象字段而不是整个对象? 例如,常规循环看起来像这样:
#foreach($obj in $list)
${obj.title}
#end
现在我只是让obj.toString()返回obj.title,但如果我需要另一个字段呢?
感谢。
更新结束我自己实现此方法并将其提交给DisplayTools。所以它现在是Tools 2.0的一部分。
答案 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列表告诉我们。哎呀,如果有一天我很无聊,我可能会自己这样做。