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.