0

状況は次のとおりです。クライアント側のユーザーがデータを入力し、コマンドボタンを押してajaxリクエストを開始します。入力データに応じて、サーバー側のJSFBeanは別のページにリダイレクトします。ただし、それに加えて、HTML5の機能であるlocalstorageとsessionstorageは、Beanの結果に応じて、クライアント側で更新する必要があります。ストレージには、ユーザーから入力されたデータが必要であるため、ストレージのJavaスクリプトは元のページ内にある必要があります。

さて、問題は、応答後、常にリダイレクトが最初に行われ、js関数を実行する前に行われるため、curseのクライアント側のユーザーからの入力データにアクセスできないことです。

クライアント側で「oncomplete」のようなコマンドボタンを押した後、コールバックパラメーター(リダイレクトは以前に行われます)またはサーバー側からのRequestContext.executeを使用してjs関数を呼び出すことを試みました(ただし、これは内部的にもoncompleteイベントを使用すると思います) 。私が想像できる1つの可能な解決策は、クライアント側でwindow.onunloadを使用し、非表示の入力式を使用してBeanの結果を取得することです。しかし、もっと良い解決策はありませんか?

4

2 に答える 2

2

JSFではなくJSでリダイレクトする必要があります。同じページに戻るようにactionメソッドから戻りnull、次のスクリプトを実行してJSでリダイレクトを実行します。

window.location = newURL;
于 2012-10-12T10:05:12.337 に答える
0

PrimeFacesをJSFで使用する場合、JavaScriptでPrimeFaces.ajax.ResponseProcessor.doRedirectのグローバルオーバーライドを作成して、実際のリダイレクトが発生する前にカスタムコードを配置することができます。

PrimeFaces.ajax.ResponseProcessor.doRedirect = function(node) {

   // <<<< your code is here >>>>

   window.location = node.getAttribute('url');
}

このコードをいくつかのjsファイルに入れて、すべてのページに含めます。

于 2017-02-10T08:44:28.003 に答える