3

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

谢谢

4

2 回答 2

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}"
}

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

于 2013-05-29T11:02:03.730 回答
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,则路径更短,可能是一些元类 功夫。

于 2013-05-29T10:39:12.540 回答