2013-05-29 56 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。