我试图从服务中使用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')
}
}
答案 0 :(得分:7)
Grails 3
解决方案是注入grailsApplication
对象并使用其上下文获取topic:
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版本,类包为taglib bean:
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')