我在我的UrlMapping文件中制定了以下规则,现在我的所有控制器都与("/$username"
)映射匹配,而不是第一个("/$controller/$action?/$id?"
)。
这里的想法是使用短网址列出用户的所有公共项目。它有效,但它打破了所有其他控制器。
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/$username" {
controller = 'user'
action = 'publicItens'
}
"/"(controller:'usuario', action: 'index' )
"500"(view:'/error')
}
如何正确映射?
答案 0 :(得分:1)
解决!
我刚刚在UrlMappings中编写了一些代码,以便为应用程序中的每个控制器自动创建规则。当用户键入/ appname / controllerName时,使用此方法,则会考虑自动创建的规则来代替“$ / username”规则。
关键点是使用不推荐使用的ApplicationHolder。这可以修复编写自己的ApplicationHolder。
static mappings = {
//creates one mapping rule for each controller in the application
ApplicationHolder.application.controllerClasses*.logicalPropertyName.each { cName ->
"/$cName" {
controller = cName
}
}
"/$controller/$action?/$id?"{
}
"/$username" {
controller = 'usuario'
action = 'itensPublicos'
}
"/"(controller:'usuario', action: 'index' )
"500"(view:'/error')
}
答案 1 :(得分:0)
只需将/users/$username
添加到网址映射即可。这是实现目标的最简单方法。
"/users/$username" {
controller = 'user'
action = 'publicItens'
}
答案 2 :(得分:0)
你也可以在第一个url映射约束中排除user和usario控制器(notEqual)
http://www.grails.org/doc/latest/ref/Constraints/notEqual.html