13

我已经设置了 web.xml,以便任何 java.lang.Throwable(即任何未捕获的异常或错误)都将转发到错误页面。但是,对于 AJAXified 组件,异常不会通过此机制路由到错误页面。

我的测试用例是一个简单的CommandButton绑定到一个总是抛出RuntimeException. 似乎最好的做法是让操作方法捕获异常并添加FacesMessage类型错误严重性。这是人们做的吗?有没有办法配置 JSF,以便在 AJAXified 组件的支持 bean 方法抛出异常时可以显示错误页面?

4

1 回答 1

16

您需要为此实现一个自定义,当 ajax 请求中发生异常时,ExceptionHandler基本上执行以下操作:

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. 您可以在此处找到完整的源代码,并此处找到展示示例。

也可以看看:

于 2012-05-04T14:56:50.770 回答