ajax jsf exception-handling jsf-2.2

Manejo de excepciones en solicitudes JSF ajax



exception-handling jsf-2.2 (1)

Este problema se conoce y se desarrolla, entre otros, en el escaparate OmniFaces FullAjaxExceptionHandler .

Básicamente, debe crear un ExceptionHandler personalizado, ya que JSF estándar no proporciona uno fuera de la caja (al menos, no es sensato). Allí podrás obtener la instancia de Exception causa todos los problemas.

Aquí hay un ejemplo inicial:

public class YourExceptionHandler extends ExceptionHandlerWrapper { private ExceptionHandler wrapped; public YourExceptionHandler(ExceptionHandler wrapped) { this.wrapped = wrapped; } @Override public void handle() throws FacesException { FacesContext facesContext = FacesContext.getCurrentInstance(); for (Iterator<ExceptionQueuedEvent> iter = getUnhandledExceptionQueuedEvents().iterator(); iter.hasNext();) { Throwable exception = iter.next().getContext().getException(); // There it is! // Now do your thing with it. This example implementation merely prints the stack trace. exception.printStackTrace(); // You could redirect to an error page (bad practice). // Or you could render a full error page (as OmniFaces does). // Or you could show a FATAL faces message. // Or you could trigger an oncomplete script. // etc.. } getWrapped().handle(); } @Override public ExceptionHandler getWrapped() { return wrapped; } }

Para que se ejecute, cree una ExceptionHandlerFactory personalizada de la siguiente manera:

public class YourExceptionHandlerFactory extends ExceptionHandlerFactory { private ExceptionHandlerFactory parent; public YourExceptionHandlerFactory(ExceptionHandlerFactory parent) { this.parent = parent; } @Override public ExceptionHandler getExceptionHandler() { return new YourExceptionHandler(parent.getExceptionHandler()); } }

Que debe registrarse en faces-config.xml siguiente manera:

<factory> <exception-handler-factory>com.example.YourExceptionHandlerFactory</exception-handler-factory> </factory>

Ver también:

¿Cómo manejo la excepción y accedo al seguimiento de la pila cuando se produce una excepción al procesar una solicitud JSF ajax? En este momento, solo recibo el nombre y el mensaje de la clase de excepción en una alerta de JavaScript cuando la etapa del proyecto JSF está configurada en Desarrollo. Peor aún, no hay comentarios visuales de ningún tipo cuando la etapa del proyecto JSF se establece en Producción, y el registro del servidor no muestra ninguna información sobre la excepción.

Si eso es relevante, estoy usando GlassFish en Netbeans.