【发布时间】:2013-05-29 09:53:56
【问题描述】:
我有控制器AdminTagController。默认情况下,视图将位于/adminTag 文件夹中。是否可以将此控制器的默认文件夹更改为/admin/view?我可以为每种方法指定视图,但这并不酷
谢谢
【问题讨论】:
标签: grails view convention-over-configur
我有控制器AdminTagController。默认情况下,视图将位于/adminTag 文件夹中。是否可以将此控制器的默认文件夹更改为/admin/view?我可以为每种方法指定视图,但这并不酷
谢谢
【问题讨论】:
标签: grails view convention-over-configur
可以使用控制器的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 bean
在 resources.groovy 或您的插件描述符中,用您的自定义类覆盖 groovyPageResourceLoader bean。
如果您不想覆盖默认的 Spring Bean,则可能是一些较短的路径,metaclasskung fu。
【讨论】: