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

Posted

技术标签:

【中文标题】我可以在 GSP 之外使用 grails 标签吗?【英文标题】:Can I use grails tag outside of GSP? 【发布时间】:2010-11-14 13:49:48 【问题描述】:

比如我可以放

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

肯定不止这些,在 grails 控制器中使用上面的代码就会得到error=groovy.lang.MissingPropertyException: No such property: g 肯定还有更多!请参阅 Matt Christianson 关于如何解决“没有此类属性:g”错误的答案。 我认为你必须先将 grailsApplication 注入到带有def grailsApplication 的控制器中。在服务中,您必须首先使用def g = gspTagLibraryLookup.lookupNamespaceDispatcher("g") 定义“g”。【参考方案2】:

将 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')

【讨论】:

我到处搜索以了解如何在服务中创建链接...感谢您发布此内容!【参考方案3】:

对于非托管类,您可以通过以下方式引用 g 标签库:

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

【讨论】:

【参考方案4】:

从 Grails 2.0 开始,在控制器之外(因此对于服务、异步作业等)执行此操作的本机方法是使用 LinkGenerator 类。适用于任何地方,并在官方文档中提到。在此处查看示例

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

【讨论】:

以上是关于我可以在 GSP 之外使用 grails 标签吗?的主要内容,如果未能解决你的问题,请参考以下文章

Grails Spring Security 插件和 GSP 标签不起作用

在 grails gsp 中调用标签不起作用

Grails GSP <g:set> 标签设置为整数?

什么是 ASP 的 ContentPlaceHolder 的 Grails GSP 等价物?

在 grails gsp 模板中,如何使用服务器端注释而不使站点网格抛出错误?

Grails 在 javascript 内的 GSP 站点中使用 grails var