一尘不染

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

ajax

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

我拥有的测试用例很简单CommandButton,并且总是与引发的action方法绑定在一起RuntimeException。似乎最佳实践似乎是让action方法捕获异常并添加FacesMessage类型错误严重性。这是人们的工作吗?有没有一种方法可以配置JSF,以便如果AJAXified组件的后备bean方法抛出异常,则可以显示错误页面?


阅读 253

收藏
2020-07-26

共1个答案

一尘不染

您需要为此实现一个自定义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。你可以找到完整的源代码在这里和展示例子在这里

2020-07-26