2011-07-01 10 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 

ここで、さまざまな結果をまとめたいとします。私たちは "generic"マクロを使用して、リストを合計する必要のある属性の名前を渡すことができます。以下のような何か:

#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で何かをハックする必要があります。

関連する問題