3

我在中定义了以下全局错误处理程序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 之后清除闪存范围(由服务器上未捕获的异常引起)?

4

1 回答 1

0

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

确保您只有一个 500 in 的映射UrlMappings.groovy(删除或注释掉 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,那么您会看到预期的结果。最后一个映射覆盖旧映射。

于 2013-08-19T22:14:31.197 回答