g:链接忽略命名映射

时间:2013-03-04 22:21:25

标签: grails gsp

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

基本上忽略了我的映射参数。我做错了什么帮忙?

3 个答案:

答案 0 :(得分: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版本的文档。

答案 1 :(得分:0)

所以我最终得到了这个问题,这是一个两个url映射冲突的问题。

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

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

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

然后使用createLink with controller ='userAdmin'。

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

屁股上的巨大痛苦....

答案 2 :(得分:-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>