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