当过滤器返回false时,渲染视图调用会发生什么?

时间:2014-01-31 11:44:45

标签: grails view filter

我有一个过滤器执行一些检查并根据检查失败返回false。但是,在它返回false之前,它会呈现在出现此类错误时应向用户显示的错误视图。相反,显示一个空白页面,其中包含错误代码404.请注意,url包含不存在的控制器和操作,所以通常404会有意义但是因为我在这里应用了一个全局过滤器,它被调用并进行渲染调用,我是关注那个没有实现的渲染调用。

2 个答案:

答案 0 :(得分:0)

你能分享代码吗?

我猜你试图渲染一些不存在的东西。

以下代码适用于我

    def filters = {
       before = { Map model ->
                ...
                render (view: '/access-denied')
                return false

    }

并呈现access-denied.gsp

通常我也不会在这种情况下渲染视图,而是将其重定向到类似下面的内容

            before = { Map model ->
                ...
                redirect(uri: '/access-denied')
                return false
            }

答案 1 :(得分:0)

您可以使用forward在过滤器中渲染视图。 E.g。

all(controller:'*', action:'*') {
    before = {  
        if(requirePost &&  !"post".equalsIgnoreCase(request.method)) {
            response.status = 405
            response.setHeader('Access','POST');
            forward(controller: 'page', action: 'http405')
            return false;
        } 
    }
}

这样URL就不会改变。