多重操作不适用于速度模板

时间:2017-10-30 11:56:27

标签: java spring email velocity hybris

我的速度版本是1.7我的虚拟文件中不起作用的变量的乘法

foreach( $entry in ${ctx.order.entries} )

#if(${entry.quantity})
    #set ($pQty = ${entry.quantity})
#end
#if(${entry.product.weight})
    #set ($prodWeight = ${entry.product.weight})
#end
#if(${pQty} && ${prodWeight})
    #set ($totalWeight = $pQty * $prodWeight)       
#else
    #set ($totalWeight = 0)     
#end
  <tr class="border_bottom table_data">
  <td>${pQty }</td>
  <td>${prodWeight}</td>
  <td>${totalWeight}</td>

输出为11 1.0 $ {totalWeight}

未显示totalWeight值。

如果我把硬编码值设置为11 * 1.0那么它的计算正确但无法计算我何时使用$ totalWeight = $ pQty * $ prodWeight

如果你能帮我解决这个问题,那将是件好事。

谢谢,

1 个答案:

答案 0 :(得分:1)

您的一个或两个引用必须是字符串而不是数字。您可以通过显示$pQty.class.name$prodWeight.class.name来查看。

Velocity 1.7不会从字符串到数字进行任何隐式转换。

为了做到这一点,您可以:

  • 升级到Velocity 2.0,它处理这种隐式转换
  • 确保$ pQty和$ prodWeight是调用代码中的数字
  • MathTool(或您自己的任何普通Java对象做同样的事情)添加到Velocity上下文中:

    #set($pQty = $math.toNumber($pQty))
    #set($prodWeight = $math.toNumber($prodWeight))