2011-11-18 11 views
5

मैं HTTP प्रतिक्रिया में त्रुटि संदेश प्रदर्शित करने के लिए एक grails नियंत्रक से एक त्रुटि संदेश पास करने का प्रयास कर रहा हूं, लेकिन मुझे यकीन नहीं है कि त्रुटि नियंत्रक में त्रुटि संदेश कौन सा पैरामीटर रख रहा है।Grails नियंत्रकों के बीच त्रुटि संदेशों को कैसे पास करें?

URLMappings.groovy

सभी 500 त्रुटियों ErrorsController ErrorsController GenericController को

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

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

मैप की जाती हैं

def serverError = { 

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

} 

मुझे त्रुटियों के नियंत्रक में अपवाद तक पहुंचने की आवश्यकता है ताकि मैं इसे 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() से संदेश बना देता है।

संबंधित मुद्दे