我可以在GSP之外使用grails标签吗?

我可以在GSP之外使用grails标签吗?,grails,groovy,tags,closures,Grails,Groovy,Tags,Closures,例如,我可以 <g:createLink controller="user" action="show" /> 在一个.gsp文件中,它将很好地工作 但我也希望在.groovy文件中使用相同的闭包createLink,该文件不属于grails视图您可以使用grails控制器中的taglib方法,例如: def userShow = g.createLink(controller:"user", action:"show") 对于内置标记库(或g命名空间中的标记库),可以在

例如,我可以

 <g:createLink controller="user" action="show" /> 

在一个.gsp文件中,它将很好地工作


但我也希望在.groovy文件中使用相同的闭包
createLink
,该文件不属于grails视图

您可以使用grails控制器中的taglib方法,例如:

def userShow = g.createLink(controller:"user", action:"show")

对于内置标记库(或g命名空间中的标记库),可以在方法调用中省略命名空间前缀。

将grailsApplication注入服务/筛选器

def grailsApplication
去拿春豆

def g = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
def userShow = g.createLink(controller: 'user', action: 'show')

对于非托管类,可以使用以下内容引用
g
taglib:

def g = ApplicationHolder.application.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')

从Grails2.0开始,在控制器之外执行此操作的本机方法(对于服务、异步作业等)是使用LinkGenerator类。在任何地方都有效,并在官方文件中提及。参见这里的示例


我到处搜索,想看看如何在服务中创建链接。。。谢谢你发布这个!肯定还有更多,在grails控制器中仅使用上述代码会给出
error=groovy.lang.MissingPropertyException:没有这样的属性:g
。肯定还有更多!请参阅Matt Christianson关于如何解决“No-this-property:g”错误的回答。我认为必须首先使用
def grailsApplication
将grailsApplication注入控制器。在服务中,必须首先使用
def g=gspTagLibraryLookup.lookupNamespaceDispatcher(“g”)
定义“g”。