0

私は 3 つのドメインを持っています: - EligibilityInclusion - EligibilityExclusion - EligibilitySummary

eligibility.gsp もビルドします (3 つのテンプレートを組み合わせて使用​​します: _inclusion、_exclusion、_summary ; また、JQueryUI タブを使用して各ドメインを 1 つのタブにレンダリングしています)。

表示にはすべて問題ありませんが、作成、編集、一覧表示、および表示に 1 つのコントローラーのみを使用したいと考えています。
1 つのコントローラーだけで 3 つのドメインを処理するにはどうすればよいですか?
(たとえば、EligibilityController を使用して 3 つのドメインを処理したいと考えています)

最良の使用法は何ですか:
- 複数のオブジェクトをバインドしますか? - コマンド オブジェクトを使用しますか?

4

2 に答える 2

2

残念ながら、コマンド オブジェクトはビューの入力モデルには役立ちません。それらは、リクエスト パラメータのバインドと検証のために出力モデルを支援するように特別に設計されています。ただし、ビュー モデルを作成するためのデータ バインディングを実現するために何らかのメタ プログラミングを掘り下げる準備ができている場合は、コマンド オブジェクトに基づいて独自のビュー モデルを作成できます。
これが基本的なアプローチです。次のコードは、コントローラのビューにモデルとして渡すことができるコマンド オブジェクトを構築します。

class ItemCommand {
 // attribute declarations ...

public void bindData(def domainInstance){
    domainInstance.properties.keySet().each { prop ->
        if(prop == "class"){
            // not needed
        } else if(prop == "metaClass") {
            // not needed
        } else if(this.properties.containsKey(prop)){
            this."${prop}" = domainInstance."${prop}"
        }
    }
}

これにより、ドメイン オブジェクトごとに bindData を呼び出すことで、異なるドメイン オブジェクトからのデータをバインドできます。

これが私が使用するソリューションの本質です。ドメイン オブジェクトを更新する場合は、さまざまなドメイン オブジェクトの ID (およびバージョン属性) を隠しフィールドとして保存する必要があります。

于 2011-02-01T00:11:49.663 に答える
0

それらのいくつかが同じフィールド名を持っている場合、複数のオブジェクトを送信することはできませんよね?

のような 3 つのフィールドを持つ単一のコマンドに 3 つのオブジェクトを結合しようとしinclusionInstance1, inclusingInstance2, summaryInstance1ますname='command.inclusionInstance1.name'command.properties = paramsフォームの送信時に割り当てが機能するはずです。

于 2011-01-31T21:34:15.757 に答える