Grails中的混淆嵌入变量

时间:2014-06-17 11:38:22

标签: grails grails-2.0

我在Grails文档中看到了这个

static mappings = {
   "/$blog/$year/$month/$day/$id"(controller: "blog", action: "show")
}
The above mapping would let you do things like:

/graemerocher/2007/01/10/my_funky_blog_entry
The individual tokens in the URL would again be mapped into the params object with values available for year, month, day, id and so on.

我有疑问的是,如果我还有一个不同的地图,那就是 / $ day /& month(上/ $ month / $ day)。即使相同的路径也适用于我的新映射,然后它如何识别哪个动态映射以及如何绑定到 params 对象。

2 个答案:

答案 0 :(得分:0)

如果没有明确的单一映射(例如重叠),则最具体的映射获胜(最少通配符,大多数静态部分)。最后,你的urlmappings中的顺序决定了。

预编辑(参见评论,错误示例): 见https://github.com/grails/grails-core/blob/master/grails-web-url-mappings/src/test/groovy/org/codehaus/groovy/grails/web/mapping/OverlappingUrlMappingsMatchingSpec.groovy

答案 1 :(得分:0)

你永远不应该像这样定义2个映射:

"/$day/$month"(controller: 'one', action: 'index')

"/$month/$day"(controller: 'two', action: 'index')

问题在于,无法区分它们以用于转发URL映射。如果请求变成类似/5/6的内容,那么框架就没有好的方法来决定使用哪一个。您可以使用命名映射来帮助进行反向URL查找,但是前向映射仍然是一个问题。你需要一些使它们独一无二的东西才能使它们有意义。它们可能具有不同的前缀或约束,但是如上所述具有2个单独的映射是没有意义的。框架没有办法理解这些。