在我们的项目中,我们使用 PrimeFaces 3.3 和OmniFacesFullAjaxExceptionHandler
,如本博客所述。
它对所有 Ajax 调用都非常有效,除了我们load()
在扩展 PrimeFaces 的类中的方法实现中的异常LazyDataModel
。在方法中抛出异常后,它不会出现在类方法load()
的迭代器中:handleAjaxException()
FullAjaxExceptionHandler
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 错误吗?