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エラー コードのマッピングが 1 つしかありませんか?

500 in のマッピングが 1 つだけであることを確認しますUrlMappings.groovy(create-app で Grails によって提供されるデフォルトのマッピングを削除またはコメントアウトします)。

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 に答える