我有一个grails应用程序,它被分成三个。
我需要创建一个URL映射,这样/ p1委托插件#1控制器和/ p2委托给插件#2控制器。首先是因为它们在语义上不同,但也因为它们有一些重叠的控制器名称。
可以通过映射自动实现,还是必须手动提供所有映射?
static mappings = {
"/p1/$controller/$action/$id?(.$format)?" {
constraints {
// use only controllers from p1
}
}
"/p2/$controller/$action/$id?(.$format)?" {
constraints {
// use only controllers from p2
}
}
"/$controller/$action?/$id?(.$format)?"{
constraints {
// only use app controllers??
}
}
"/"(view:"/index")
"500"(view:'/error')
}
答案 0 :(得分:1)
仔细查看有关URL映射的Grails documentation,了解如何为控制器解析指定插件的映射。来自文档:
允许应用程序使用提供的插件 与控制器同名的控制器 应用程序和两个控制器都没有定义命名空间 属性,只要控制器在单独的包中。对于 例如,应用程序可能包含一个名为的控制器 com.accounting.ReportingController和应用程序可能会使用 提供名为的控制器的插件 com.humanresources.ReportingController。唯一的问题是 插件提供的控制器的URL映射需要 显式指定映射适用于 由插件提供的ReportingController。
请参阅以下示例。
static mappings = { "/accountingReports" { controller = "reporting" } "/humanResourceReports" { controller = "reporting" plugin = "humanResources" } }
我怀疑在您的示例中,您的URL映射可能如下所示:
"/p1/$controller/$action/$id?(.$format)?" {
plugin = "p1"
constraints {
// use only controllers from p1
}
}
"/p2/$controller/$action/$id?(.$format)?" {
plugin = "p2"
constraints {
// use only controllers from p2
}
}
"/$controller/$action?/$id?(.$format)?"{
constraints {
// only use app controllers??
}
}
尽管如此,文档的措辞确实说明了插件提供的控制器需要明确指定映射,这将向我指示上述动态映射可能不起作用。