速度:$display.list() 和对象的集合

发布于 2024-07-09 20:19:49 字数 417 浏览 4 评论 0原文

Velocity DisplayTool 有一个有用的方法:

$display.list($list)

它将集合或数组格式化为“A、B 和 C”形式。

问题是假设我有一个对象的 ArrayList,如何输出特定的对象字段而不是整个对象? 例如,常规循环如下所示:

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

现在我刚刚使用 obj.toString() 返回 obj.title,但是如果我需要另一个字段怎么办?

谢谢。

更新 最终我自己实现了这个方法并将其提交给 DisplayTools。 所以它现在是Tools 2.0的一部分。

Velocity DisplayTool has a useful method:

$display.list($list)

That will format a collection or array into the form "A, B and C".

The problem is lets say I have an ArrayList of objects, how do I output a specific object field instead of the whole object?
For example the regular loop would look like this:

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

For now I just made obj.toString() to return obj.title, but what if I will need another field?

Thanks.

UPDATE Ended up implementing this method myself and committing it to DisplayTools. So it is a part of Tools 2.0 now.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风苍溪 2024-07-16 20:19:49

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

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)

希望这有帮助。

So you want to end up with a formatted string like "title1, title2 and title3", where each element is the title property of a list of, say, Book objects? Two approaches come to mind:

1) Construct the list of titles yourself manually then hand that off to $display.list(). E.g.,:

#set($titles = [])
#foreach($obj in $list)
  $titles.add($obj.title)
#end
$display.list($titles)

2) Create a Velocity macro to retrieve a given property from a list, call that macro on your book list with the title property, then hand that to $display.list(). E.g.:

#macro(retrieveProperty $list $property $newList)
  #foreach($obj in $list)
    $newList.add(${obj.${property}})
  #end
#end

#set($titles = [])
retrieveProperty($list 'title' $titles)
$display.list($titles)

Hope this helps.

贪恋 2024-07-16 20:19:49

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

You might consider extending the DisplayTool to support this. Take a look at the SortTool, it allows you to sort on properties. Copying code from there should give you a good start toward adding this to DisplayTool. And if you do this and feel like sharing, let us know over on the [email protected] list. Heck, if i'm bored some day, i might do this myself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文