2011-11-18 9 views
5

Tôi đang cố truyền thông báo lỗi từ bộ điều khiển grails đến bộ điều khiển lỗi grails để hiển thị thông báo lỗi trong phản hồi HTTP, nhưng tôi không chắc thông số nào đang giữ thông báo lỗi trong bộ điều khiển lỗi.Làm thế nào để truyền thông báo lỗi giữa bộ điều khiển Grails?

URLMappings.groovy

Tất cả 500 lỗi được ánh xạ tới 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??) 

} 

Tôi cần truy cập ngoại lệ trong ErrorsController để tôi có thể xuất ra phản hồi HTTP.

Trả lời

8

Cách thông thường để truyền các thông điệp ngắn giữa các bộ điều khiển là đặt nó trong phạm vi flash. Ví dụ:

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

Trong trường hợp cụ thể này, tại sao bạn lại bắt ngoại lệ? Nếu bạn để cho trường hợp ngoại lệ sụp đổ, grails sẽ tự động tạo ra lỗi máy chủ và gọi ánh xạ "500". Trong bộ điều khiển lỗi của bạn, ngoại lệ sẽ có sẵn dưới dạng request.exception.

+0

ngọt ngào, làm việc tuyệt vời, thx – raffian

+0

Tôi nhận thấy rằng 'flash.message' đôi khi hiển thị hai lần; đầu tiên cho yêu cầu ban đầu, và một lần nữa vào yêu cầu tiếp theo; để giải quyết vấn đề này tôi đang sử dụng 'request.message' thay vào đó, hãy đặt câu hỏi: điểm của thông điệp flash là gì? – raffian

0

Trong bạn ErrorsController:

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

ám chỉ rằng thông điệp từ e.getMessage().