0

サービスから grails 内部 taglib を使用しようとしていますが、次のエラーが表示されます。

No signature of method: MyService.message() is applicable for argument types: (java.util.LinkedHashMap) values: [[code:default.app.name]]

これは私が使用しているコードです:

class MyService {

    def myMethod() {
        def appName = message(code: 'default.app.name')
    }

}
4

1 に答える 1

7

グレイルズ 3

解決策は、オブジェクトを注入し、grailsApplicationそのコンテキストを使用してtaglib Beanを取得することです。

class MyService {

    def grailsApplication

    def myMethod() {
        def g = grailsApplication.mainContext.getBean('org.grails.plugins.web.taglib.ApplicationTagLib')
        def appName = g.message(code: 'default.app.name')
    }

}

グレイルズ 2

古いバージョンの grails では、クラス パッケージが若干異なります。

def g = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')

このパッケージを新しいバージョンの grails (3+) で使用しようとすると、次のエラーが表示されます。

No bean named 'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib' is defined.    

カスタムタグライブラリ

どのバージョンでも、サービスからカスタム taglib を使用する必要がある場合は、次のようなコードを使用するだけです。

def c = grailsApplication.mainContext.getBean('my.pkg.HelpfulTagLib')
于 2016-04-28T21:56:08.753 に答える