2010-12-30 5 views
0

を「nullオブジェクトエラーのメソッドを呼び出すことはできません」 - コントローラからサービスを呼び出すことはできません:
http://www.grails.org/ServicesGrailsの - >常に得る私はGrailsのアプリケーションを持っていると私はここにチュートリアルを以下のよ

私はいくつかを持っていますコードのような

import org.springframework.beans.factory.InitializingBean 

class SubmitRequestService implements InitializingBean{ 
    def GrailsApplication1 
    def setting 

    void afterPropertiesSet(){ 
     this.setting = GrailsApplication1.config.setting 
    } 

    def void sendHistoricalContract(HistoricalContract hc_instance){ 
     //... blah blah whatever code  
    } 
} 

class SubmitRequestController {  
    def submitRequestService 
    static allowedMethods = [save: "POST", update: "POST", delete: "POST"] 

    def index = { 
     // .... blah blah whatever code 
     submitRequestService.sendHistoricalContract(historicalContractInstance) 
    }  
} 

私は何も、私はサービスにコントローラに注入されるように見えることはできません。私がサービスを呼び出す行に着くたびに、エラーが表示されます:

ERROR errors.GrailsExceptionResolver - Cannot invoke method sendHistoricalContract() on null object

私は間違っていますか?

答えて

0

バートの答えは(バートへの+1)と便利ですが、場合には他の人がここにチュートリアル次のとおりです。
http://www.grails.org/Services
をし、私が持っていた同じ問題を経験して、私はそれを明示的にしたい:

Services go in their own files under the Services directory, you do not combine them with controllers, even though it looks that way in the code examples

サービスとSpring Frameworkに関する追加リソースについては、上記のBurtのコメントを参照してください。

+0

オリジナルのリンクが死んでいるようです。 「サービス」に関する2.xユーザガイドの章への更新されたリンクがあります:http://grails.org/doc/latest/ref/Services/Usage.html –

6

GrailsApplication1は奇妙に見える事前に

おかげ - から来ることを何?あなたが設定を取得するGrailsApplicationインスタンスにアクセスしたい場合は、grailsApplicationのSpring Beanのための依存性注入を使用します。

class SubmitRequestService implements InitializingBean { 

    private setting 

    def grailsApplication 

    void afterPropertiesSet() { 
     setting = grailsApplication.config.setting 
    } 

    void sendHistoricalContract(HistoricalContract hc_instance) { 
     //... blah blah whatever code  
    } 
} 

私の推測では、GrailsApplication1がに注入されるからそれを保つのサービスで問題を引き起こしているということですコントローラが、私はそれが起動時に例外で爆破すると思います。 grails cleanを実行して、完全な再コンパイルを強制してください。

+0

おかげで、私はGrailsのには本当に新しいですし、ちょうどチュートリアルを以下に示します。私が知る限り、Servicesフォルダ内にSubmitRequestServiceを宣言していませんでした(クラス宣言をコントローラと同じファイルに追加するだけです)。サービス宣言を適切なフォルダ内の独自のファイルに移動すると、サービス宣言がコンパイルされ、今すぐ実行されます。サービスに関して私が指摘したり、InitializingBeanを実装するサービスを作成したりするためのドキュメントやチュートリアルはありますか? thanks –

+0

'InitializingBean'を実装するだけで、' afterPropertiesSet() 'が呼び出されます。あなたは何を求めていますか? –

+0

@w InitializingBeanはSpringインタフェースなので、参考にできるSpringリソース(ユーザマニュアル、多くの書籍)がたくさんあります。 Grailsの1つの問題は、Spring ApplicationContextの作業が完了した後にMetaClassメソッドが有線接続されていることです。そこにはタイミングの問題があります。 1つの例は、動的に追加された 'log'フィールドがafterPropertiesSetで使用できないということです。このような問題はあまりないので、標準のSpringドキュメントが役に立ちます。 –

1

これまでに私はこの問題に遭遇しました。

grailsApplication1に変更されました。

は、その後、あなたが呼び出す:

this.setting = grailsApplication1.config.setting 

お知らせサービスの場合、返信用

関連する問題