3

見つからない URL のカスタム 404 URL マッピングを作成しようとしました。

"/test" {
    controller="test"
}
"404" {
    controller="application"
    action="send404"
}
"500" {
    controller="application"
    action="send500"
}

しかし、何らかの理由で、コントローラーとアクションが呼び出されることはありません。デフォルトのコンテナ 404 ページが表示されます。だから、代わりに私は試しました:

"/test" {
    controller="test"
}
"/**" {
    controller="application"
    action="send404"
}
"500" {
    controller="application"
    action="send500"
}

すべてのリクエストで send404 アクションも呼び出すように見えることを除いて、これはうまく機能しているようです。たとえば、/test を押すと、テスト ページが表示されますが、send404() アクションで作成したログ ステートメントも表示されます。

アイデアを歓迎します...

4

3 に答える 3

2

この回答で概説されているように、宣言で空白を削除しようとしましたか?

"404"(controller:'application', action:'send404')

このトピックに関する未解決の問題GRAILS-4232もあります。

于 2012-11-23T10:18:41.493 に答える
1

grails には、500 でスタック トレースをレンダリングする ErrorController などがあります。

class UrlMappings {
  static mappings {
    "403" (controller: "error", action: "forbidden")
    "404" (controller: "error", action: "notFound")
    "500" (controller: "error", action: "internalError")
  }
}

そして、render(controller:"error", action"notFound")別のコントローラーで RESTful のままにすることができます。または、エラー コントローラーの notFound アクションを自動的にレンダリングします。

詳細はこちら: http://groovy.dzone.com/articles/grails-exception-handling-http

于 2012-12-18T20:42:05.917 に答える
0

おそらく、これが発生する原因となっているのは、リクエストごとにブラウザによってリクエストされている favicon.ico です。

// Route 404 to this action to see!
def send404() {

    log.error("404 Page Not Found! " + request.forwardURI)
    response.status = 404;
    render(view:"/application/not-found.gsp")        
}
于 2012-12-20T17:44:57.323 に答える