0

Orderドメイン クラス ( ) と、hasMany = [items: Item]のインスタンスを編集できる編集画面がありますOrder

編集画面には、追加/削除されたtotalCostajax 経由で計算されるフィールドがあります。itemsのバックエンド計算totalCostは複雑で (フロントエンドでは実行できず、バックエンドで実行する必要があります)、以下に依存します。

  • 編集画面での保存されていない変更の状態
  • order編集画面自体にない編集中のプロパティ

したがって、totalCost計算を実行するには、次のようにします。

def ajaxCalculateTotalCost() {
    def order = Order.get(params.id)
    order.properties = params
    def totalCost = // complex calculation based on params.items, logged in user and so on...
    // return totalCost as JSON here
}

ajaxCalculateTotalCost()これに関する問題は、編集中のインスタンスに対して ajax 呼び出しが行われるOrderと保存されることです。私が理解している限り、Spring または Hibernate は HTTP リクエストの最後にセッションをフラッシュしますか???

これは、ユーザーが追加/削除したかのように、フォームの下部をitemsクリックして変更をキャンセルできない場合の問題です ( ajax 呼び出しが発生したときに保存されます)。CancelOrder

Orderインスタンスを保存せずに計算を実行する方法を誰かが提案できますか?

4

2 に答える 2

2

readの代わりに使用しgetます。

def order = Order.read(params.id)

コントローラーのアクションを としてマークし@Transactional(readOnly=true)ます。

もう 1 つのオプションは、計算を に移動しservice class、サービス メソッドをマークすることです。@Transactional(readOnly=true)

于 2014-07-04T07:53:47.793 に答える