这样的代码:
<g:link controller="category" action="show" id="${category.id}">${category.name}</g:link>
产生下一个链接:
<a href="/shop/categories/show/1/**">Test category</a>
为什么会发生以及如何删除这个看起来不错的双星号?
来自您的评论:
urlmappings包含此
"/categories/$action?/$id?/**?"
。但是我真的想告诉圣杯,我不在乎URL是否包含有意义部分后的一些不必要的部分。
未结合的通配符(*
和**
)为"向前"的URL映射做正确的事情(即,采用传入的请求URI并将其映射到具有参数的控制器操作中),但是,查看默认RegexUrlMapping
的源代码您尝试在反向中使用此类映射,而*
和**
组件实际上将包含在生成的URL中。为了能够生成明智的URL,映射的每个段都必须是文字或绑定到指定变量的文字,因此生成器可以知道替换通配符应该使用的(可能是空的)值。
如果要使用映射
"/categories/$action?/$id?/$path**?"
然后,它仍将在正向模式下匹配相同的URI(在params.path
中存储id
之后的URI的尾随部分),但是<g:link controller="category" action="show" id="${category.id}">
会知道使用空的拖延组件,因为您没有指定params="[path:'something']"
。