2011-07-01 7 views
0

注入されたサービスからコマンドフィールドを初期化します。Grailsコマンドオブジェクト@PostConstructまたは何か?

は、だから私は後にコマンドの方法を実行する必要があり、それは完全に初期化されていますが、paramsをフィールドに割り当てられます。

どうすればいいですか? OK、コンストラクタで手作業でService Beanを取得できます。もっと良い方法?

@PostConstructまたはInitializingBeanで運がなかった - CommandがBeanではないようですね、そうですか?

のGrails 1.3.5

答えて

1

あなたはコマンドがBeanではありません正しいです。コマンド・インスタンスをサービス・メソッドでインスタンス化し、そこで初期化を行い、インスタンスをコントローラに戻すことができます。戻り値のあるインスタンスのコントローラのbindDataを次のように呼び出します。

// controller code 
def myService // injected 

def action = { 
    def command = mySerivce.createCommandInstance() 
    bindData(command, params) 
} 

// service code 
class MyService { 
    def createCommandInstance() { 
     def cmd = new MyCommand() 
     doSomeInitializationWithCommand(cmd) 
     return cmd 
    } 
} 
+0

ありがとう。最後の手段として、私はこれをします。基本的に、これは、 'createCommandInstance()/ bindData()'がすべてのアクション内にある必要があるため、手作業で 'Command'機能を再作成しています。今のところ、 'Command'コンストラクタの' ApplicationContext'を介してサービスBeanにアクセスすることに固執します - それはCommandに余分なコードを追加しますが、Controllersに対してコードを繰り返さないでしょう。 –

関連する問題