【发布时间】:2013-09-12 14:12:27
【问题描述】:
在我们的项目中,我们使用 PrimeFaces 3.3 和 OmniFaces FullAjaxExceptionHandler,如 this blog 中所述。
它对所有 Ajax 调用都非常有效,除了我们在扩展 PrimeFaces LazyDataModel 的类中实现 load() 方法中的异常。在load()方法中抛出异常后,在FullAjaxExceptionHandler类的handleAjaxException()方法中的迭代器中不会出现异常:
Iterator<ExceptionQueuedEvent> unhandledExceptionQueuedEvents = getUnhandledExceptionQueuedEvents().iterator();
在 Ajax 调用中引发的所有其他异常最终都在迭代器中。
我比较了堆栈跟踪,这就是我的发现:使用 PrimeFaces 延迟加载时,堆栈跟踪显示它发生在渲染响应阶段:
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:391)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
在调用应用阶段发生非延迟加载错误:
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
我有以下问题:
-
FullAjaxExceptionHandler没有捕获异常的原因是因为它在生命周期中被抛出得太晚了吗? - 这是 PrimeFaces 错误吗?
【问题讨论】:
标签: ajax jsf-2 primefaces exception-handling lazy-loading