Grails 3.2.8升级:实现过滤器

时间:2017-05-02 02:23:57

标签: grails

我正在从Grats版本2.4.4升级到3.2.8。我读到Grails 3引入了拦截器但是仍然支持过滤器。我想我想继续使用过滤器,因为我有一些广泛的过滤器。下面是一个片段,我基本上检查请求是什么,并设置变量以在视图布局gsp中使用。如何继续使用我创建的过滤器(如何注册此过滤器)或如何将以下内容转换为拦截器。

class AdminMenuFilters {

    def ACTIVE_CLASS_NAME = "active"

    def filters = {

        admin(controller:'admin', action:'index') {
            before = {
                request.dashboardActive = ACTIVE_CLASS_NAME
            }
        }

        layout(controller:'layout', action:'*'){
            before = {
                def layoutActive = false
                switch(actionName){
                    case null :
                        layoutActive = true
                        break;
                    case "index" :
                        layoutActive = true
                        break;
                    case "tags" :
                        layoutActive = true
                        break;
                    case "how" :
                        layoutActive = true
                        break;
                }
                if(layoutActive){
                    request.layoutActive = ACTIVE_CLASS_NAME
                }
            }
        }
    }
}

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

请参阅升级文档,您可以使用过滤器插件继续使用过滤器。 http://docs.grails.org/latest/guide/upgrading.html

答案 1 :(得分:0)

我找到了一个使用拦截器的解决方案。我需要为每个控制器而不是一个过滤器创建一个拦截器,然后使用正则表达式来捕获何时选择一个动作并设置我的活动变量。

使用布局控制器的示例

class LayoutActiveInterceptor{

    LayoutActiveInterceptor(){
        match(controller:"layout", action: ~/(index|tags|how)/)
    }

    boolean before() { 
        request.layoutActive = Constants.ACTIVE_CLASS_NAME
        true 
    }

    boolean after() { true }

    void afterView() {
        // no-op
    }
}

老实说,我认为这是一个类文件足够的情况。任何关于如何注册过滤器的指导都是非常感谢的。在此先感谢您的帮助。