0

我正在尝试使用服务中的 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')
    }

}
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.    

自定义标签库

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

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