私は次のような状況にいます:
- JSF (MyFaces 2.1.7 および RichFaces 3.3.3)
- セッション スコープ Bean TEST_PAGE
- BACKボタンを延々と使い続けるユーザー
- サーバーの状態保存
シナリオ:
- ユーザーはリンクをクリックして、Session Scoped Bean (TEST_PAGE) を含むページに移動します
- ユーザーが別のリンクをクリックする
- ユーザーがブラウザの戻るボタンを押すと、TEST_PAGE に戻ります。
- ユーザーがこのページで検索を試みる
多くの値があるため、バッキング Bean は検索時に例外をスローしnull
ます。その理由は、「検索」を押したときにページがRESTORE_VIEW
フェーズにあるためです。
ユーザーが戻るボタンでページを更新するように強制するために、ページのキャッシュを無効にしてみましたが、多くのユーザーが「なぜ戻るボタンを使用できないのですか。以前はできたのに!」と不満を漏らしていました。アプリケーションが「フォーム再送信の確認」ページのクロム/IE/Firefoxショーでクラッシュしていると考えているため、ヘルプデスクチケットが発生したため、マネージャーは代替案を探すように求めています。
私の質問:
RESTORE_VIEW の現在の Phase_ID を検出し、例外を回避するためにこのフェーズで処理を行わないことは可能ですが、それだけで再調整するだけで、ユーザーは部分的なページ ビューを得ることができます。RENDER_RESPONSE
このシナリオにページを入れて処理を行うことは可能ですか? これにより、ページが更新されます。
質問パート2
推奨事項(または一般的/良い)の実践は、動的ページのキャッシュを無効にすることであるため、私はそうしましたが、頑固なユーザーを再教育する必要があります。
ただし、次の問題があります。
キャッシュが無効になっているページで [戻る] ボタンを押すと、ブラウザに「フォームの再送信の確認」(chrome) が表示され、ユーザーはこのボタンを押すRefresh / F5
かEnter
キーを押すことができます。
Refresh/ F5
がアクションの場合、RESTORE_VIEW
フェーズを検出し、その PHASE での処理を回避し、処理をフェーズで実行できる場合はすべて問題ありませんRENDER_RESPONSE
。ただし、Enter
が押された場合、PhaseID は入ってRENDER_RESPONSE(6)
いますが、いくつかのドロップダウン コントロールの値が null であるため、ページが失敗します。そのため、そのような状態を検出するチェックを入れ、FaceMessage を表示して、ユーザーにページを更新するように伝えます。
質問は、ユーザーに強制的に更新させる代わりに、強制的にページを更新させることはできますか? このページのナビゲーション ケースの形式は次のとおりです。
<navigation-rule>
<navigation-case>
<from-outcome>/app/ord/r1</from-outcome>
<to-view-id>/jsp/ordersHistory.jsp</to-view-id>
</navigation-case>
</navigation-rule>
faces-redirect=true
ページを強制的にリロードするために使用されるコード スニペットをオンラインで見たことがありますが、それを機能させることができませんでした。助言がありますか?