【发布时间】:2025-11-30 21:25:01
【问题描述】:
比如我可以放
<g:createLink controller="user" action="show" />
在 .gsp 文件中,它会很好地工作。
但我也想在不属于 grails 视图的 .groovy 文件中使用相同的闭包 createLink
【问题讨论】:
标签: grails groovy tags closures
比如我可以放
<g:createLink controller="user" action="show" />
在 .gsp 文件中,它会很好地工作。
但我也想在不属于 grails 视图的 .groovy 文件中使用相同的闭包 createLink
【问题讨论】:
标签: grails groovy tags closures
您可以使用来自 Grails 控制器的 taglib 方法,例如:
def userShow = g.createLink(controller:"user", action:"show")
对于内置标记库(或 g 命名空间中的标记库),您可以在方法调用中省略命名空间前缀。
【讨论】:
error=groovy.lang.MissingPropertyException: No such property: g。
def grailsApplication 的控制器中。在服务中,您必须首先使用def g = gspTagLibraryLookup.lookupNamespaceDispatcher("g") 定义“g”。
将 grailsApplication 注入您的服务/过滤器。
def grailsApplication
然后获取 Spring bean。
def g = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
def userShow = g.createLink(controller: 'user', action: 'show')
【讨论】:
对于非托管类,您可以通过以下方式引用 g 标签库:
def g = ApplicationHolder.application.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
【讨论】:
从 Grails 2.0 开始,在控制器之外(因此对于服务、异步作业等)执行此操作的本机方法是使用 LinkGenerator 类。适用于任何地方,并在官方文档中提到。在此处查看示例
http://mrhaki.blogspot.ca/2012/01/grails-goodness-generate-links-outside.html
【讨论】: