我有控制器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