gpt4 book ai didi

grails - 如何覆盖 ApplicationTagLib#createLink 和 g :link? 的标准行为

转载 作者:行者123 更新时间:2023-12-04 01:47:48 27 4
gpt4 key购买 nike

背景 :
我有使用 g:createLink 的 grails 1.3.7 应用程序和 g:link在许多页面上。

最近我决定对 url 映射进行重大更改 - 引入前面的路径元素。

  • 目前我有:/$controller/$action?/$id?
  • 但是想拥有:/$regionId/$controller/$action?/$id?

  • 更改 urlMappings 很容易,但我无法弄清楚如何轻松更改通过应用程序构建链接的行为。

    基本上,我不想浏览每个页面并更改链接。但想在一个地方做到这一点。

    问题
    如何覆盖 ApplicationTagLib#createLink 功能,以便 grails 将使用此实现,而无需更改使用此标记(或函数)的页面?

    任何帮助都非常感谢!

    最佳答案

    我有一个类似的问题。实际上你可以像这样装饰 g:link 标签。

    1) 标签库

    import org.codehaus.groovy.grails.plugins.web.taglib.*

    class OverrideDefaultTagLib {

    static namespace = "g"

    def link = { attrs, body ->

    def c = "1" // Get it from session or somewhere else

    if (attrs.params) {
    attrs.params.put("region", c)
    } else {
    attrs.params = [region: c]
    }

    def applicationTagLib = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
    applicationTagLib.link.call(attrs, body)
    }
    }
    }

    2) 添加到 UrlMappings.groovy
    "/$region/$controller/$action?/$id?"{}

    关于grails - 如何覆盖 ApplicationTagLib#createLink 和 g :link? 的标准行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6230852/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com