我们正在使用Velocity生成处理重复任务结果的报告。 我们传入处理过的包列表和相关结果。
#foreach($pkg in $packages)
<tr>
<td>$pkg.name</td>
<td>$pkg.numItems</td>
<td>$pkg.processingTime</td>
<td>$pkg.numErrors</td>
</tr>
#end
现在我们想要包含一个摘要,即我们想要总结不同的结果。我们虽然使用了一个“通用”宏,我们可以将列表和传递给应该总结的属性名称。类似的东西:
#macro(sum $list $attribute)
#set($total=0)
#foreach($item in $list)
#set($total =$total+$item.$attribute)
#end
$total
#end
但是这不起作用 - 是否有可能编写一个“通用”宏来计算列表项的任何属性的总和,或者我们必须在调用速度之前计算它们的总数或为每个项计算它们个别属性?
答案 0 :(得分:0)
Velocity并不打算用作脚本语言。所以
#set( $total = $total+$item.$attribute )
不会像你希望的那样工作。如果$ item类有get(String属性)方法,那么你可以这样做:
#set( $total = $total+$item.get($attribute) )
否则,您可能需要使用VelocityTools项目中的RenderTool和MathTool进行修改。