3

私たちのプロジェクトでは、このブログで説明されているように、 OmniFacesFullAjaxExceptionHandlerとともに PrimeFaces 3.3 を使用しています。

load()PrimeFaces を拡張するクラスのメソッドの実装における例外を除いて、すべての Ajax 呼び出しで非常にうまく機能します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)

次の質問があります。

  1. FullAjaxExceptionHandlerライフサイクルの後半にスローされたために例外をキャッチしない理由はありますか?
  2. それはPrimeFacesのバグですか?
4

1 に答える 1

3

これをバグとは言いませんが、遅延モデルが FilterFeature によって呼び出され、レンダリング フェーズで encode* メソッドによって呼び出されるのは、少し残念な設計です。

JSF では、ビジネス ロジック コード (データのフェッチなど) はアプリケーション フェーズで起動されることが想定されているため、多くの機能が遅延読み込みで機能しないことは驚くことではありません。機能していない他のことの 1 つは、コードでコンポーネントの更新を要求することです。

RequestContext.getInstance().update("componentId")

コンポーネントを更新するために、JavaScript 呼び出しを追加する必要がありました。

RequestContext.getInstance().execute("triggerUpdate('componentId')")

あなたの場合、JavaScript 呼び出しを追加することが実行可能な回避策になる可能性があります。JavaScript 呼び出しは単に応答 XML に追加されるだけなので、各フェーズで機能します (これにより、私のケースを解決することができました - 更新の要求)。

于 2013-09-13T07:48:00.007 に答える