我有颜色和阴影的映射。每种颜色都可以有多种色调。
我怎样才能有如下映射:“color/5/shades
”。有了这个,我希望显示颜色Id 5的所有阴影。
目前我的映射是这样的:
"/colors"(controller: "color", parseRequest: true){
action = [GET: "list"]
}
"/color/$id" (resource: "color"){
constraints {
id validator: {
!(it in ['create', 'detail')
}
}
}
答案 0 :(得分:1)
Grails 2.3 is concerned可以轻松映射。
//Grails 2.3
"/color"(resources:'color') {
"/shades"(resources:"shade")
}
然后您可以访问/color/${id}/shades
当 Grails 2.2.4或更低时,我认为您的UrlMapping
可以更优化,如下所示:
class UrlMappings {
static mappings = {
"/colors/$id?/$shades?" (resource: "color"){
constraints {
shades validator: {
it in ['shades']
}
id validator: {it.isNumber()}
}
}
"/"(view:"/index")
"500"(view:'/error')
}
}
//controller action corresponding
//GET
def show(){
if(params.id){
if(params.shades){
//If both id and shades present in URL
//then getShades
//maps to "/colors/5/shades"
getShades()
} else {
//If only id provided then GET color
//maps to "/colors/5"
getColor()
}
} else {
//If id not provided the list all colors
//maps to "/colors"
listColors()
}
}
private def getShades(){...}
private def getColor(){...}
private def listColors(){...}
注意强>
请注意删除grails提供的默认映射
//remove
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
删除默认条目背后的基本原理: -
如果删除此条目,则不会使用(create
和detail
)的其他验证器,假设您没有使用REST服务的默认条目。