2011-11-18 14 views
5

私は、HTTPレスポンスにエラーメッセージを表示するためにgrailsコントローラからgrailsエラーコントローラにエラーメッセージを渡そうとしていますが、どのパラメータがエラーコントローラにエラーメッセージを保持しているのかわかりません。Grailsコントローラ間でエラーメッセージを渡すには?

URLMappings.groovy全ての500エラーはErrorsController

def { 
    try{ 
    //do some work 
    }catch(Exception e){ 
    response.sendError(500, e.getMessage()) 
    } 
} 

GenericController

"500"(controller: "errors", action: "serverError") 

ErrorsControllerにマッピングされる

def serverError = { 

    render(how can I access the exception details here??) 

} 

HTTPレスポンスに出力できるように、私はErrorsControllerの例外にアクセスする必要があります。

答えて

8

コントローラ間で短い情報メッセージを渡す通常の方法は、フラッシュスコープに配置することです。たとえば、この特定のケースで

def myAction = { 
    try { 
     ... 
    } catch (Exception e) { 
     flash.message = e.message 
     response.sendError(500) 
    } 
} 

、しかし、なぜあなたは例外をキャッチしていますか?例外が落ちるようにすると、grailsは自動的にサーバエラーを生成し、 "500"マッピングを呼び出します。エラーコントローラでは、例外はrequest.exceptionとして利用可能になります。あなたのErrorsController

+0

sweet、worked great、thx – raffian

+0

「flash.message」が2回表示されることがあります。最初の要求に対しては最初に、次の要求では再び要求に応答します。この問題に対処するために、代わりに 'request.message'を使用して、質問をしてください:フラッシュメッセージのポイントは何ですか? – raffian

0

def serverError() { 
    render request.getAttribute('javax.servlet.error.message') 
} 

e.getMessage()からのメッセージをレンダリングします。

関連する問題