2016-04-28 60 views
0

我試圖將Grails內部的taglib從服務3個呼叫標籤庫,但我收到此錯誤:的Grails從服務

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') 
    } 

} 

回答

6

的Grails 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') 
    } 

} 

的Grails 2

年紀較大的Grails版本類包是slightly different

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.  

自定義標籤庫

對於任何版本,如果您需要使用您的自定義標籤庫從服務只需使用一個這樣的代碼:

def c = grailsApplication.mainContext.getBean('my.pkg.HelpfulTagLib') 
+1

我會建議使用的ApplicationTagLib稍微不同的方法,即依賴於你正在使用的導入,所以不依賴於Grails版本的錯誤:ApplicationTagLib g = grailsApplication.mainContext.getBean(ApplicationTagLib.class.name)作爲ApplicationTagLib',或者如果你更喜歡'def g = grailsApplication.mainContext.getBean(ApplicationTagLib.class.name)' – ncerezo