2011-07-01 259 views
0

我們正在使用Velocity生成處理重複性任務的結果報告。 我們傳入已處理的軟件包和相關結果的列表。Apache Velocity「generic」宏

#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

Velocity並不意味着被用作腳本語言。所以

#set($total = $total+$item.$attribute) 

將無法​​正常工作,因爲你希望。如果你的$項目類有一個get(String類型的屬性)方法,那麼你可以做:

#set($total = $total+$item.get($attribute)) 

否則,你可能會需要從VelocityTools項目砍了與RenderTool和MathTool東西。