我已经设置了web.xml,以便任何java.lang.Throwable(即任何未捕获的异常或错误)都会转发到错误页面。但是,对于AJAXified组件,异常不会通过此机制路由到错误页面。
我所拥有的测试用例是一个简单的CommandButton
绑定到一个始终抛出RuntimeException
的操作方法。似乎最佳做法是让action方法捕获异常并添加FacesMessage
类型错误严重性。这是人们做的吗?有没有办法配置JSF,以便如果AJAXified组件的支持bean方法抛出异常,可以显示错误页面?
答案 0 :(得分:16)
您需要为此实现自定义ExceptionHandler
,当ajax请求中发生异常时,基本以下内容:
String errorPageLocation = "/WEB-INF/errorpages/500.xhtml";
context.setViewRoot(context.getApplication().getViewHandler().createView(context, errorPageLocation));
context.getPartialViewContext().setRenderAll(true);
context.renderResponse();
如果您想将web.xml
错误页面考虑在内,这并非完全无关紧要。您需要解析整个web.xml
以查找错误页面位置。此外,当渲染响应期间发生异常时,您基本上需要自己重建整个视图。 OmniFaces组件库具有这样的异常处理程序FullAjaxExceptionHandler
。您可以找到完整的源代码here和展示示例here。