2011-11-18 192 views
5

我想從grails控制器傳遞錯誤消息到grails錯誤控制器,以便在HTTP響應中顯示錯誤消息,但我不確定哪些參數在錯誤控制器中保存了錯誤消息。如何在Grails控制器之間傳遞錯誤消息?

URLMappings.groovy

所有500錯誤都映射到ErrorsController

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

GenericController

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

ErrorsController

def serverError = { 

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

} 

我需要訪問ErrorsController中的異常,以便我可以將它輸出到HTTP響應中。

回答

8

在控制器之間傳遞簡短信息消息的常用方法是將其放置在閃存範圍中。例如:

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

但是,在這種特殊情況下,您爲什麼要捕捉異常?如果讓異常通過,grails會自動生成服務器錯誤並調用「500」映射。在您的錯誤控制器中,該例外將作爲request.exception提供。

+0

甜,工作很好,thx – raffian

+0

我注意到'flash.message'有時會顯示兩次;首先用於初始請求,再用於下一個請求;爲了解決這個問題,我使用'request.message'來代替這個問題:閃存信息有什麼意義? – raffian

0

在你ErrorsController

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

呈現從e.getMessage()消息。

相關問題