【问题标题】:Grails URL mapping cause error on GSPGrails URL 映射导致 GSP 错误
【发布时间】:2012-02-13 15:14:48
【问题描述】:

我有一个网址与此类似的网站:

/mysite/admin/controller/action/id
/mysite/search/controller/action/id
/mysite/user/controller/action/id

我有这样的 URL 映射

"/$prefix/$controller/$action?/$id?"{
    constraints {}
}

我能够正确到达控制器。

但是在普惠制方面

<g:link controller="controller">abc</g:link> ==> <a href="/mysite/controller/...">abc</a>

注意我是如何丢失 mysite 和控制器之间的前缀的。

【问题讨论】:

    标签: grails gsp urlmappings.groovy


    【解决方案1】:

    您可以使用named url mappings,然后将prefix 作为参数的一部分传递:

    URL 映射:

    name prefix: "/$prefix/$controller/$action?/$id?"{
        constraints {}
    }
    

    普惠制:

    <g:link mapping="prefix" params="[prefix:$prefix, controller:...]">abc</g:link>
    

    要使用sortableColumn,只需将所有URLMapping 参数放在params 属性中即可:

    <g:sortableColumn property="col" title="title" params="[ prefix: 'prefix', controller:'controller', action:'action']" />
    

    【讨论】:

    • 这适用于
    • 我之前的评论有误。我删除了它并更新了我的答案。
    【解决方案2】:

    当您在浏览器中点击 URL 时,它会起作用,因为 URL 中存在前缀。当您使用链接标签创建 url 时,它不起作用,因为 grails 没有关于该控制器应该使用哪个前缀的信息。您需要为链接标签提供前缀值。

    试试这个

    <g:link controller="controller" params="[prefix:'admin']">abc</g:link>
    

    简而言之 - 如果您希望链接重写以考虑它们,则必须将这些动态变量作为参数传递。阅读更多文档here

    【讨论】:

    • 我知道我需要传递 params="[prefix:'admin']",我想说的是。它仅适用于 这个 URL 转换为 /mysite/controller/action/id?prefix=admin,我的前缀在网址。
    • 在这种情况下,您将不得不更改 url 映射以明确指定控制器名称 "/admin/$controller/$action?/$id?"(controller:"Admin") "/search/ $controller/$action?/$id?"(controller:"Search")
    • 是的,我试过了,这实际上是我的第一次尝试,它仍然没有保留前缀。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2014-02-25
    • 1970-01-01
    相关资源
    最近更新 更多