我的gsp页面中有以下变量
<g:set var="valueDiscounted" value="${new ReceiptController().calculateDiscount(receiptInstance.totalAmount,
receiptInstance.discount)}" />
valueDiscounted
变量从名为calculateDiscount
的控制器方法获取其值。现在,我需要使用此变量作为另一个控制器方法的参数,我需要在同一个gsp中调用。那就是:
<td>Amount to pay: </td><td>€ ${new ReceiptController().calculateVat(${valueDiscounted},
receiptInstance.vatPercentage)}</td>
这种方法不正确,那么如何将valueDiscounted
传递给calculateVat
方法?
答案 0 :(得分:2)
通常认为尝试从视图调用控制器方法是一种糟糕的设计。相反,您应该将逻辑放入 taglib ,控制器和视图都可以调用它。
或者在这种情况下,将计算结果放入控制器动作中,将计算出的值存储在模型中,然后视图只需要从模型中渲染值而不是自己计算任何值。
答案 1 :(得分:1)
您是否尝试过使用不带$ {}折扣的价值:
<td>Amount to pay: </td><td>€ ${new ReceiptController().calculateVat(valueDiscounted,
receiptInstance.vatPercentage)}</td>
或者,尝试g:设置金额付款,然后使用它,类似于:
<g:set var="amountToPay" value="${new ReceiptController().calculateVat(valueDiscounted,
receiptInstance.vatPercentage)}" />
<td>Amount to pay: </td><td>€ ${amountToPay}</td>
我没试过,只是质问。
答案 2 :(得分:0)
有时我会将服务实例传递给模型。
//MyService
def calculateDiscount(def totalAmount, def discount){
// logic here
}
def calculateVat(def valueDiscounted, def vatPercentage){
// logic here
}
//MyController
def myService
def index(){
['instance':receiptInstance, 'service': myService]
}
//GSP
<g:set var="valueDiscounted" value="${service.calculateDiscount( instance.totalAmount, instance.discount)}" />
...
€ ${service.calculateVat(valueDiscounted, instance.vatPercentage)}