2011-11-18 13 views
5

Estoy tratando de pasar un mensaje de error desde un controlador Grails a un controlador Grails Error para mostrar un mensaje de error en la respuesta HTTP, pero no estoy seguro de qué parámetro contiene el mensaje de error en el controlador de error.¿Cómo pasar mensajes de error entre los controladores Grails?

URLMappings.groovy

Todos los errores 500 se asignan a 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??) 

} 

Necesito acceder a la excepción en ErrorsController para poder enviarla a la respuesta HTTP.

Respuesta

8

La forma habitual de pasar mensajes cortos de información entre los controladores es colocarlo en el alcance del flash. Por ejemplo:

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

En este caso particular, sin embargo, ¿por qué atrapa la excepción? Si deja pasar la excepción, Grails generará automáticamente un error de servidor y llamará a la asignación "500". En su controlador de errores, la excepción estará disponible como request.exception.

+0

dulce, funcionó muy bien, thx – raffian

+0

Me he dado cuenta de que 'flash.message' a veces se muestra dos veces; primero para la solicitud inicial, y nuevamente en la próxima solicitud; para abordar esto estoy usando 'request.message' en su lugar, mendigando la pregunta: ¿cuál es el punto del mensaje flash? – raffian

0

En su ErrorsController:

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

renders el mensaje de e.getMessage().

Cuestiones relacionadas