天涯尽头无女友
OmniFaces FullAjaxExceptionHandler展示柜中充实了这个问题。基本上,您需要创建一个定制,ExceptionHandler因为标准JSF不会提供一个定制的定制(至少不是明智的选择)。在其中,您将可以接触Exception引起所有麻烦的实例。这是一个启动示例: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 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; }}为了使其运行,请ExceptionHandlerFactory如下创建一个自定义:public class YourExceptionHandlerFactory extends ExceptionHandlerFactory { private ExceptionHandlerFactory parent; public YourExceptionHandlerFactory(ExceptionHandlerFactory parent) { this.parent = parent; } @Override public ExceptionHandler getExceptionHandler() { return new YourExceptionHandler(parent.getExceptionHandler()); }}需要进行以下注册faces-config.xml: com.example.YourExceptionHandlerFactory