4

p:ajax 呼び出しで、リスナーは含むメソッドを呼び出します

     FacesContext.getCurrentInstance().getExternalContext().dispatch("/uri.jsf");  

動作しません。行にブレークポイントを設定しましたが、実行時に同じポイントに留まります。先に進まないため、サーバーを再起動してアプリケーションを再度実行する必要があります。

    FacesContext.getCurrentInstance().getExternalContext().redirect("/uri.jsf");

リダイレクトは完全に正常に機能します。しかし、別のページに移動するためのディスパッチであるページフォワードが必要です。

4

1 に答える 1

5

ExternalContext#dispatch()ajax リクエストをサポートしていません。これにより、JSF は、JavaScript ajax エンジンが理解できない特定のリソースの HTML 出力をレンダリングします。ajax リクエストは、JavaScript ajax エンジンが理解できる特別な XML レスポンスを返す必要があります。

ExternalContext#redirect()ajax リクエストをサポートしています。指定された URL で呼び出しを呼び出すように JavaScript ajax エンジンに指示する特別な XML 応答が自動的に返されます (この回答window.locationで XML の例を見つけることができます)。

次の 2 つのオプションがあります。

  1. ajax 以外のリクエストにします。
  2. 通常の JSF ナビゲーションを実行します。

非 ajax リクエストを作成することは、ほとんどの場合、 のオプションではありません<p:ajax>。その場合は、通常のナビゲーションを実行するしかありません。

FacesContext context = FacesContext.getCurrentInstance();
context.getApplication().getNavigationHandler().handleNavigation(context, null, "/uri.jsf");

render="@all"ajax リクエストの場合、新しいコンテンツを自動的に強制します。

于 2013-01-04T20:11:11.033 に答える