处理AJAXified组件的JSF 2.0异常的正确方法是什么?

时间:2012-05-04 13:31:02

标签: ajax jsf-2 exception-handling

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

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

1 个答案:

答案 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

另见: