Grails3从服务调用taglib

Grails3从服务调用taglib,grails,grails-services,Grails,Grails Services,我试图从服务中使用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

我试图从服务中使用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')
    }

}

Grails 3

解决方案是注入
grailsApplication
对象,并使用其上下文获取:

Grails 2

对于较旧的grails版本,类包是:

如果您尝试将此软件包与较新的grails版本(3+)一起使用,您将收到一个错误:

No bean named 'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib' is defined.    
自定义标记库

对于任何版本,如果需要从服务使用自定义标记库,只需使用如下代码:

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

我建议对ApplicationAglib使用一种稍有不同的方法,它依赖于您正在使用的导入,因此与Grails版本无关,不太容易出错:
ApplicationAglib g=grailsApplication.mainContext.getBean(ApplicationAglib.class.name)如果您更喜欢
def g=grailsApplication.mainContext.getBean(ApplicationTagLib.class.name),可以作为ApplicationTagLib
或不带类型
No bean named 'org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib' is defined.    
def c = grailsApplication.mainContext.getBean('my.pkg.HelpfulTagLib')