2013-05-29 43 views
3

我有控制器AdminTagController。默認情況下,視圖將位於/adminTag文件夾中。是否可以將此控制器的默認文件夾更改爲/admin/view?我可以爲每種方法指定看法,但它的不冷靜Grails:如何更改默認視圖位置?

謝謝

回答

8

可以使用控制器的afterInterceptor進行更改。檢查示例:

def afterInterceptor = { model, modelAndView -> 
    println "Current view is ${modelAndView.viewName}" 
    if (model.someVar) { 
     modelAndView.viewName = "/mycontroller/someotherview" 
    } 
    println "View is now ${modelAndView.viewName}" 
} 

這適用於您的控制器的所有操作。

+0

不錯的答案,我通常儘量避免攔截器... +1 – rimero

2

在你的情況,我會做重活的控制器,因爲只有一個類受到影響。

但是,這是另一種方式,使用自定義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。