0

状況があります。リスト付きのセッション Bean があります。このリストは、html データ テーブルに表示されます。ユーザーがブラウザまたは通常の href から URL にアクセスすると、すべてのレコードを表示する必要があります。フィルタリングされたリストを表示する必要があるデータを検索するための規定もあります。ユーザーが検索を行った後、リストにはフィルター処理されたレコードが含まれ、これを行った後、彼はページを別のページに残します。ユーザーが URL にアクセスするか、メニューを使用してこのページに戻ると、このリストがあるためです。セッション Bean では、フィルタリングされたリストがまだあります。

JSF 1.1 または 2.0 の preRenderView コンセプトにはデフォルト アクションがないため、リストをクリアして、フィルタリングされていないデータ (すべての結果) を再度取得することは困難です。getList() メソッドのトリックでさえ、タスクを達成できません。

ユーザーがブラウザーで href または URL ヒットを介してページに到達すると、アプリケーションの呼び出しフェーズが発生しないため、フェーズ リスナーを使用する予定です。セッション Bean でブール変数を切り替えることができ、getList() でいくつかのトリックを実行して、URL、href ヒット、またはコマンド ボタンでチェックすることができます。

私が自分自身を明確にしたことを願っています。つまり、リクエストが href、browser、またはアクションから直接送信されたかどうかを Bean で特定する必要があります。検索アクションがデータ テーブルのレコードをフィルター処理する場合、そうでない場合はリスト キャッシュを保持し、検索が行われない限り表示し続けます。

私が物事を正しい方法で行っているか、考えすぎているか、またはもっと効率的な方法で行うことができるかどうかを教えてください.

前もって感謝します。まあプラットフォームは weblogic ポータル 10.3 の jsf 1.1 です .....

4

1 に答える 1

1

JSF 1.x アクションは、デフォルトのPOSTメソッドを使用します。直接リンク/ブックマーク/その他は、本来のGET方法によるものです。ResponseStateManager#isPostback()JSF 1.1 にはorがないFacesContext#isPostback()ため、リクエスト メソッドを自分で決定する必要があります。

HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
boolean postback = "POST".equalsIgnoreCase(request.getMethod());

または、リクエスト パラメーター マップで特定のパラメーターを確認しますが、どのパラメーターを確認したいのか頭の中でわかりません。あなたはそれを自分で決めなければなりません。

boolean postback = facesContext.getExternalContext().getRequestParameterMap().containsKey(SOME_KEY);

の場合、JSF アクションが呼び出されていますpostbacktrue

于 2010-10-06T19:28:34.527 に答える