【问题标题】:g:link ignoring named mappingg:link 忽略命名映射
【发布时间】:2013-03-04 22:21:24
【问题描述】:

我有以下名为UrlMapping

name 'admin_user' :"/admin/user/$action?/$id?"(controller:'userAdmin')

在另一个页面上site/edit.gsp (/admin/site/edit) 我正在打电话:

<g:link  mapping="admin_user" action='create' class="create" >New User</g:link>

但它的生成

/admin/site/create

基本上忽略了我的映射参数。对我做错了什么有帮助吗?

【问题讨论】:

    标签: grails gsp


    【解决方案1】:

    这个映射似乎没问题。我在我的 Grails v2.0.4 环境中做对了。

    <g:link  mapping="admin_user" action='create' class="create" >New User</g:link>
    

    产生一个链接到:

    /admin/user/create
    

    <g:link  mapping="admin_user" action='create' class="create" id="3">New User</g:link>
    

    生成

    /admin/user/create/3
    

    您可以检查 UrlMapping.groovy 是否在正确的位置,或者您采用的 Grails 版本的文档。

    【讨论】:

    • 你运行这个的.gsp在哪里?
    • 没关系,因为你可以在任何地方使用 g:link。我尝试过使用“/”或/path/。两条路都很好。
    【解决方案2】:

    所以我终于明白了,这是两个 url 映射冲突的问题。

    name 'admin_user' :"/admin/user/$action?/$id?"(controller:'userAdmin')
    "/$controller/$action?/$id?"()
    

    它忽略了第一个并总是使用第二个。我最终不得不放弃使用 admin 前缀,实际上使用了我定义的 /admin/userAdmin/

    "/admin/$controller/$action?/$id?"()
    

    然后将 createLink 与 controller='userAdmin' 一起使用。

    每当我需要指向 /user/xxx 的链接时,我都会明确定义它。

    大痛苦……

    【讨论】:

      【解决方案3】:

      您似乎没有正确创建或使用您的命名映射。您正在尝试同时使用命名映射和action,但操作表单优先,这就是您最终获得/controller/action 链接的原因。基于docs,您需要为您的操作指定一个特定的命名映射,看起来更像这样:

      name createAdminUser: "/admin/user/create" {
          controller = 'userAdmin'
      }
      

      您仍然可以通过params="[name: value]" 传递命名参数,例如$id?(这对于创建似乎没有意义)。 在您的视图中使用它,例如:

      <g:link mapping="createAdminUser" class="create">New User</g:link>
      

      【讨论】:

      • 哪一部分是正确的?关闭,还是名称?还是我使用 $action 之类的参数?
      • 闭包结合g:link标签使用action
      猜你喜欢
      • 2013-12-26
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      相关资源
      最近更新 更多