2011-11-18 5 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'가 두 번 표시되는 경우가 있습니다. 먼저 최초 요청에 대해, 그리고 다음 요청에 대해서 다시; 이 문제를 해결하기 위해 나는 대신'request.message'를 사용하여 질문을 간청합니다. 플래시 메시지의 요점은 무엇입니까? – raffian

0

:

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

e.getMessage()에서 메시지를 렌더링합니다.

관련 문제