过滤器中的渲染GSP不起作用

时间:2012-12-02 06:31:30

标签: grails filter

我正在尝试从我的过滤器中在视图文件夹中呈现.GSP视图。以下代码显示:

def filters = {
   all(controller:'*', action:'*') {

      afterView = { Exception e ->

         if (controllerName) {
            //some code here

            if (annotation!=null) {
               switch(response.format){

                  case 'all':
                     if(!response.containsHeader("AC_MSG")|| !response.containsHeader("AC_STATUS")){

                        render(view: "/internalerror", model: [controller: controllerName,action:currentAction,
                               message:"Response doesn't contain required headers AC_MSG or AC_STATUS. Either add the required headers or use json format.",
                               example:"Add the following response headers: AC_MSG:response message , AC_STATUS: false or true"
                        ])
                        return false
                     }

                     break
                  default:
                     render status: 406
                     break
               }
            }
         }
      }
   }
}

问题是即使执行代码,也不会呈现此页面。该页面直接位于视图目录中。我做错了什么?

谢谢,

2 个答案:

答案 0 :(得分:2)

我认为过滤器不能渲染gsp,但控制器可以。

文档中提供了您想要做的完美示例:filters

基本上,您在呈现页面的控制器内创建一个操作,过滤器只是重定向到操作。

案例'all':

                 if(!response.containsHeader("AC_MSG")|| !response.containsHeader("AC_STATUS")) {

                    redirect(controller: "someController", action:"someAction")
                    return false
                 }

答案 1 :(得分:0)

制作ErrorController.groovy并使用此渲染视图和参数实现操作。 在过滤器中仅使用重定向。删除'return false'语句。