【问题标题】:Grails custom tag doesn't work with <g:link params>Grails 自定义标签不适用于 <g:link params>
【发布时间】:2014-07-08 02:49:51
【问题描述】:

我的 GSP 页面中有一个 &lt;g:link action="test" params='["present": "yes"]' 标签,点击该标签后,我会转到以 /test?present=yes 结尾的 URL。

如果我定义了这个自定义标签库:

class HelperTagLib {
    static defaultEncodeAs = 'html'

    static returnObjectForTags = ['passthrough']

    def passthrough = { Map attrs, Object body ->
        return attrs
    }
}

并将其添加到标签&lt;g:link action="test" params='${passthrough(["present": "yes"])}',突然我的网址以/test 结尾,完全丢失了参数。

为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 您是否尝试过使用params="${passthrough(['present': 'yes'])}"。标记"'的使用。
  • 为什么不允许您的 taglib 为您呈现该链接。在 gsp 和 taglib 中试试这个 def passthrough = { attrs, body -> out
  • @swapnilsawan 效果很好,谢谢。我仍然不明白为什么我的原始代码被破坏了,但这是一个很好的解决方法(可能比我尝试做的更好)。
  • @Kiwi 很高兴听到它对你有用,我之前已经从 taglib 渲染链接,但不知道它是否是最佳实践。我会将其作为接受的答案,以便寻求帮助的人可以参考。

标签: grails gsp taglib


【解决方案1】:

允许您的 taglib 为您呈现该链接。在 gsp 和 taglib 中试试这个 &lt;/g:passthrough&gt;

def passthrough = { attrs, body -> out << g.link(controller: 'foo', action: 'test', params: [present: 'yes']) }

【讨论】:

    【解决方案2】:

    我可以看到你在调用 taglib 时错过了 g.taglibname,应该是这样的

    &lt;g:link action="index" params="${g.doSomething(present:true)}"&gt;Ir&lt;/g:link&gt;

    我自己做的,效果很好

    但是如果你想要截取一些参数,然后在完成请求之前进行处理,也许更好的解决方案是使用 beforeInpreceptor 功能或一些过滤器。

    更多关于拦截器的信息在这里http://www.grails.org/doc/2.3.x/ref/Controllers/beforeInterceptor.html

    希望对你有帮助

    【讨论】:

    • 不幸的是,这没有帮助,但我很感激你的努力;谢谢。了解拦截器也很好。
    • 它对我有用,只是回顾一下使用 g.tagName insted of just tagName 和 remove does [] 尝试传递属性时,如果您需要更多的属性,只需将它们拆分为 ,
    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 2012-06-03
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多