0

いくつかの基本的なユーティリティ機能を持つコントローラーに追加する mixin を作成しています。mixin で実行したい機能の 1 つは、g.messagetaglib を使用してエラーを文字列に解決することです。残念ながら、GrailsApplication静的 mixin メソッド内の にアクセスできないようです。

mixin から Grails taglibs にアクセスするにはどうすればよいですか? または、すべてのコントローラー間で共通のコードを共有するという目的を達成するためのより良い方法はありますか?

これが私が実行しているコードです。問題は、静的メソッドで Grails タグ ライブラリにアクセスする方法だと思います。

            static def preparePostResponse(domainInstance) {

                    def grailsApplication = new User().domainClass.grailsApplication


                    def postResponse = new AjaxPostResponse(domainObject: domainInstance)

                    if (domainInstance.hasErrors()) {
                        g.eachError(bean: domainInstance) {
                            postResponse.errors."${it.field}" = g.message(error: it)
                        }
                        postResponse.success = false
                        postResponse.message = "There was an error"
                    }
                    else {
                        postResponse.success = true
                        postResponse.message = "Success"
                    }
                    return postResponse
                }
4

1 に答える 1

0

grailsApplicationいくつかの手法のいずれかを使用して、アプリケーションのどこからでもアクセスできます。はGrailsApplicationHolder非推奨になりましたが、BurtBeckwithはこのブログ投稿にいくつかの解決策を持っています。

おそらく最も簡単な方法は、次のように既存のドメインからそれを引き出すことです。

class MyMixin {
    static myMethod() {
        def grailsApplication = new MyDomainClass().domainClass.grailsApplication
        // use it like normal here
    }
}

彼はここでmetaClassを使用してBootStrapで変数を設定する別のメソッドを持っています。


または、このブログ投稿で、より複雑ですが(私が思うに)より優れた手法を使用して、アプリケーションにアクセスするための専用クラスを作成することもできます。これは、複数の場所で使用する場合に便利です。アプリケーションで、、などのAppCtxゲッターを含む専用クラスを作成しました。次のように記述する方がはるかにクリーンです。grailsApplicationconfig

def foo = AppCtx.grailsApplication...
于 2012-04-27T20:07:53.647 に答える