0

計算された非保存フィールドの処理に問題があります。実際のドメインクラスを表示したいのですが、フィールドがたくさんあります。それでは、次のドメインクラスについて考えてみましょう。

class ImportantCalculation {
 BigDecimal parameter1
 BigDecimal parameter2
 BigDecimal parameter3
 BigDecimal result1
 BigDecimal result2
 ...
}

result1とresult2は、parameter1、parameter2、parameter3を使用した計算のサブ結果に依存する計算フィールドです。ある種の数学表記を使用する(実際の計算には多くのクラスとデータベースクエリが含まれます):

subresult1=function(parameter1)
subresult2=function(parameter2,parameter3)
result1=function(subresult1,subresult2)
result2=function(parameter1,subresult2)

create.gspでは、この計算はサービスによって呼び出されるJavaクラスで実行されます。このサービスはコントローラーによって使用されます。そして、このコントローラーは、JavaScriptファイル内のオートコンプリートjQuery要素によって呼び出され、対応するフィールドに表示されます。

Calculations.java -> CalculationsService.groovy -> CalculationsController -> calculations.js -> GSP view.

GSPビューには、サブ結果を表示するためのフィールドが含まれています。

このサブ結果を保存する方が簡単ですが、計算できるので必要ありませんが、最終結果ではこれを行うことはできません。

したがって、このサブ結果をshow.gspビューとedit.gspビューに表示する必要があります。しかし、私はこれを行う方法がわかりません。私はAjaxとjQueryを使おうとしましたが、これらのツールはまったくの初心者です。

私を助けてください。

前もって感謝します。

4

1 に答える 1

0

gsp では、コントローラーへの ajax 呼び出しを使用して、結果を計算し、JSON として返すことができます。gsp には、次のような JavaScript コードがあります。

 $.ajax({
        var value = "any value to be passed as param";
        url: "${createLink(controller: 'calculations', action: 'calculate')}",
        data: {key:value}, //in your controller, look for the parameter "key" in params map
        dataType: 'json',
        success: function(data) {
            if (data) {
             //do something with data (the json object rendered by the action 'calculate')   
            }
        }

    });

そしてコントローラーでは、次のように、結果を計算するか、既にどこかに保存されている結果を取得するアクションがあります。

def calculate() {
    def result = calculatorService.doSomething()
    render result as JSON
}

「render」コマンドの行は、呼び出し元に結果を返す行です (JavaScript の「成功」関数)。

同じことの例をここここで見ることができます。

于 2012-10-23T14:06:13.687 に答える