Grails全局错误处理程序

时间:2013-08-19 20:21:07

标签: grails

我在UrlMappings.groovy

中定义了以下全局错误处理程序
    "404"(controller: "error", action: "notFound")
    "500"(controller: "error", action: "serverError")

处理程序的实现方式如下:

class ErrorController {

    def notFound() {
        flash.msg = "Not Found"
        redirect uri: '/'
    }

    def serverError() {
        flash.msg = "Oops"
        redirect uri: '/'
    }
}

当发生404错误时,一切正常,但当发生500错误时,当我重定向到/时,闪存范围为空。是否有一些理由为什么在500之后应该清除闪存范围(由服务器上的未捕获异常引起)?

1 个答案:

答案 0 :(得分:0)

您确定只有500错误代码的映射吗?

确保在UrlMappings.groovy中只有500个映射(删除或注释掉Grails在create-app上提供的默认映射)

static mappings = {
    "404"(controller: "error", action: "notFound")
    "500"(controller: "error", action: "serverError")

    "/"(view:"/index") //or whichever view you have for root context.
    //"500"(view:'/error') [Culprit]
}

它应该按照预期的方式使用上面的url映射。

实际上,放置很重要,如果您在grails提供的默认映射之后放置500的自定义映射,那么您将看到预期的结果。最后一个映射会覆盖旧映射。