0

我的 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>

这种方式是不正确的,那么我该如何传递valueDiscountedcalculateVat方法呢?

4

3 回答 3

2

尝试从视图调用控制器方法通常被认为是一种糟糕的设计。相反,您应该将逻辑放入taglib中,控制器和视图都可以调用它。

或者在这种情况下,将计算放入控制器动作中,将计算值存储在模型中,然后视图只需要从模型中渲染值,而不是自己计算任何东西。

于 2013-09-17T12:46:44.597 回答
1

您是否尝试过在不使用 ${} 的情况下使用 valueDiscounted:

<td>Amount to pay: </td><td>€ ${new ReceiptController().calculateVat(valueDiscounted,
        receiptInstance.vatPercentage)}</td>

或者,尝试 g:set amountToPay,然后在 中使用它,类似这样:

<g:set var="amountToPay" value="${new ReceiptController().calculateVat(valueDiscounted,
        receiptInstance.vatPercentage)}" />
<td>Amount to pay: </td><td>€ ${amountToPay}</td>

我没试过,只是问问。

于 2013-09-17T11:57:06.437 回答
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)}
于 2013-09-18T18:23:02.057 回答