【问题标题】:Grails: How can I change default view location?Grails:如何更改默认视图位置?
【发布时间】:2013-05-29 09:53:56
【问题描述】:

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

谢谢

【问题讨论】:

    标签: grails view convention-over-configur


    【解决方案1】:

    可以使用控制器的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,则可能是一些较短的路径,metaclasskung fu。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2020-07-31
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多