0

私は3つのドメインを持っている: - EligibilityInclusion - EligibilityExclusion - EligibilitySummary複数のドメインオブジェクトを1つのフォームにまとめるにはどうすればよいですか?

私は(3つのテンプレートの使用ミックスeligibility.gspも構築:_inclusion、_exclusion、_summaryを、と私はまた、それぞれをレンダリングするためにJQueryUI]タブを使用していますドメインを1つのタブで表示)。

これで表示はすべてうまくいきましたが、作成、編集、一覧表示に1台のコントローラしか使用しません。
1つのコントローラで3つのドメインを処理するにはどうすればよいですか? - 複数のオブジェを結合

(例えば、私は私の3つのドメインを処理するためにEligibilityControllerを使用したい)

は最高の使用は何ですか? - コマンドオブジェクトを使用しますか?

答えて

2

残念なことに、コマンドオブジェクトはビューの入力モデルには役立ちませんが、要求パラメータのバインディングと検証のために出力モデルを補助するように特に設計されています。しかし、ビュー・モデルの作成のためにデータ・バインディングを達成するためのメタ・プログラミングを掘り下げる準備ができている場合は、コマンド・オブジェクトに基づいて独自のビュー・モデルをロールバックすることができます。
基本的なアプローチは次のとおりです。次のコードは、コントローラ内のビューにモデルとして渡すことができるコマンドオブジェクトを構築します。これは、あなたがドメインオブジェクトごとにbindDataを呼び出すことによって、異なるドメインオブジェクトからデータをバインドすることができます

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}" 
     } 
    } 
} 

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

0

複数のオブジェクトを提出することはできません。複数のオブジェクトに同じフィールド名がある場合は、それを送信することはできません。

3つのオブジェクトを1つのCommandに3つのフィールド(例:inclusionInstance1, inclusingInstance2, summaryInstance1)とgsp-sの名前フィールド(name='command.inclusionInstance1.name'など)を結合しようとします。フォームを送信するときにcommand.properties = paramsを割り当てることが必要です。

関連する問題