我有控制器AdminTagController
。默认情况下,视图将位于/adminTag
文件夹中。是否可以将此控制器的默认文件夹更改为/admin/view
?我可以为每种方法指定看法,但它的不冷静Grails:如何更改默认视图位置?
谢谢
我有控制器AdminTagController
。默认情况下,视图将位于/adminTag
文件夹中。是否可以将此控制器的默认文件夹更改为/admin/view
?我可以为每种方法指定看法,但它的不冷静Grails:如何更改默认视图位置?
谢谢
可以使用控制器的afterInterceptor进行更改。检查示例:
def afterInterceptor = { model, modelAndView ->
println "Current view is ${modelAndView.viewName}"
if (model.someVar) {
modelAndView.viewName = "/mycontroller/someotherview"
}
println "View is now ${modelAndView.viewName}"
}
这适用于您的控制器的所有操作。
在你的情况,我会做重活的控制器,因为只有一个类受到影响。
但是,这是另一种方式,使用自定义GroovyPageResourceLoader。
当您的视图位于不遵循Grails约定的文件夹结构中时,通常会使用该方法。在你的情况下,在我看来这将是矫枉过正的。
然而,这里的总体思路:
1.创建一个扩展默认groovyPageResourceLoader类。
以下是很生吃的例子。
class AdminGroovyPageResourceLoader extends GroovyPageResourceLoader {
@Override Resource getResource(java.lang.String location) {
if (location.contains ("/admin")) {
return new FileSystemResource("PATH_TO_GSP_LOCATION_WITHOUT_FILE_EXTENSION")
}
return super.getResource(location)
}
}
2.改写默认groovyPageResourceLoader豆
在resources.groovy或插件描述符,覆盖groovyPageResourceLoader豆你的自定义类。
较短的路径,可能是一些metaclass功夫,如果你不希望覆盖默认的Spring bean。
不错的答案,我通常尽量避免拦截器... +1 – rimero