grails gsp变量:如何在gsp中作为控制器方法的参数传递

时间:2013-09-17 08:53:35

标签: variables grails gsp

我的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方法?

3 个答案:

答案 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)}