你当然可以做到这一点。看看Sérgio Michels的这篇文章,展示了如何使用afterInterceptor
. 这个想法是在渲染之前替换默认视图。
所以你的控制器将是这样的:
package test.xpublic
class FooController {
static namespace = 'public'
def afterInterceptor = { model, modelAndView ->
if (modelAndView.viewName.contains('index')) {
modelAndView.viewName = "/public/index"
}
}
def index() { }
}
您可以发挥创造力并明智地选择正确的视图,因为afterInterceptor
每个动作都会被调用。
这将帮助您从您的目录(views/admin 或 views/public)呈现视图。但是,您还需要照顾UrlMappings
class UrlMappings {
static mappings = {
"/foo/admin" {
controller="foo"
namespace = 'admin'
}
"/foo/public" {
controller="foo"
namespace = 'public'
}
...
}
最后在您需要传递命名空间的链接上。
<g:link controller='foo' namespace="admin" >Admin</g:link>
<g:link controller='foo' namespace="xpublic">Public</g:link>
此处提供了一个示例应用程序