Grails:如何更改默认视图位置?

时间:2013-05-29 09:53:56

标签: grails view convention-over-configur

我有控制器AdminTagController。默认情况下,视图将位于/adminTag文件夹中。是否可以将此控制器的默认文件夹更改为/admin/view?我可以为每个方法指定视图,但它并不酷#/ p>

谢谢

2 个答案:

答案 0 :(得分: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}"
}

这适用于控制器的所有操作。

答案 1 :(得分: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 bean

resources.groovy 或您的插件描述符中,使用您的自定义类覆盖 groovyPageResourceLoader bean。

如果你不想覆盖默认的Spring Bean,可能是一些较短的路径{@ 3}} kung fu