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

Azd*_*der 15 tags grails groovy closures

例如,我可以把

 <g:createLink controller="user" action="show" /> 
Run Code Online (Sandbox Code Playgroud)

在.gsp文件中,它会很好地工作.

但是我也想createLink在.groovy文件中使用相同的闭包,该文件不是grails视图的一部分

Joh*_*ner 20

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

def userShow = g.createLink(controller:"user", action:"show")
Run Code Online (Sandbox Code Playgroud)

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

  • 必须有更多的东西,只使用grails控制器中的上述代码给出`error = groovy.lang.MissingPropertyException:没有这样的属性:g`. (3认同)

小智 14

将grailsApplication注入您的服务/过滤器.

def grailsApplication
Run Code Online (Sandbox Code Playgroud)

并获得Spring bean.

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


jam*_*man 7

对于非托管类,您可以使用以下命令引用gtaglib:

def g = ApplicationHolder.application.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 6

从控制器之外的Grails 2.0(对于服务,异步作业等)执行此操作的本机方法是使用LinkGenerator类.到处工作,并在官方文档中提到.见这里的例子

http://mrhaki.blogspot.ca/2012/01/grails-goodness-generate-links-outside.html