处理 AJAXified 组件的 JSF 2.0 异常的正确方法是啥?
Posted
技术标签:
【中文标题】处理 AJAXified 组件的 JSF 2.0 异常的正确方法是啥?【英文标题】:What is the correct way to deal with JSF 2.0 exceptions for AJAXified components?处理 AJAXified 组件的 JSF 2.0 异常的正确方法是什么? 【发布时间】:2012-05-14 01:25:04 【问题描述】:我已设置 web.xml,以便任何 java.lang.Throwable(即任何未捕获的异常或错误)都将转发到错误页面。但是,对于 AJAXified 组件,异常不会通过此机制路由到错误页面。
我的测试用例是一个简单的CommandButton
,绑定到一个总是抛出RuntimeException
的动作方法。似乎最好的做法是让操作方法捕获异常并添加类型为错误严重性的FacesMessage
。这是人们做的吗?有没有办法配置 JSF,以便在 AJAXified 组件的支持 bean 方法抛出异常时可以显示错误页面?
【问题讨论】:
【参考方案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
。您可以找到完整的源代码here 和展示示例here。
另见:
using ExternalContext.dispatch in JSF error handler causes corrupt page rendering Session timeout and ViewExpiredException handling on JSF/PrimeFaces ajax request【讨论】:
以上是关于处理 AJAXified 组件的 JSF 2.0 异常的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
向 JSF 2.0 UIInput 组件添加自定义属性 (HTML5) 支持