-1

我有以下命名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

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

4

3 回答 3

0

这个映射似乎没问题。我在我的 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 版本的文档。

于 2013-03-05T03:36:17.773 回答
0

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

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

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

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

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

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

屁股疼得厉害....

于 2013-03-13T16:59:09.807 回答
-1

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

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

您仍然可以$id?通过params="[name: value]". 在您的视图中使用它,例如:

<g:link mapping="createAdminUser" class="create">New User</g:link>
于 2013-03-04T22:32:43.070 回答