2016-04-28 58 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