JSF2を使用して、コマンド・ボタンがバッキングBeanにリンクされたフォーム・フィールドを持つページがあります。ブラウザのバック・ボタンで古いバッキングBeanの値がクリアされない
フォームページにアクセスして値を入力して送信すると、バッキングBeanは正しい値を受け取り、次のページに移動します。ブラウザで戻るボタンを押すと、前のページに移動します。フォームに新しい値を入力して送信すると、ステップ1でバッキングBeanは古い値を受け取ります。
JSF2を使用して、コマンド・ボタンがバッキングBeanにリンクされたフォーム・フィールドを持つページがあります。ブラウザのバック・ボタンで古いバッキングBeanの値がクリアされない
フォームページにアクセスして値を入力して送信すると、バッキングBeanは正しい値を受け取り、次のページに移動します。ブラウザで戻るボタンを押すと、前のページに移動します。フォームに新しい値を入力して送信すると、ステップ1でバッキングBeanは古い値を受け取ります。
これは奇妙です。おそらく、あなたのbeanはセッションスコープに置かれているかもしれませんし、そして/またはブラウザがキャッシュからページを要求しているかもしれません。まず、適切な応答ヘッダーを設定するfilterによって、すべての動的ページのブラウザキャッシュを無効にしたいとします。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (!req.getRequestURI().startsWith(req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
res.setHeader("Pragma", "no-cache"); // HTTP 1.0.
res.setDateHeader("Expires", 0); // Proxies.
}
chain.doFilter(request, response);
}
FacesServlet
のサーブレット名または同じURLパターンにこのフィルタの地図。
最後に、あなたのフォームBeanをセッションスコープに入れないでください。それらを要求またはビューのスコープに入れます。
JSF2をグラスフィッシュの仕事で丁寧に学ぶことができます。ビューイングBeanを使用し、ブラウザの戻る/次のリンクを押してもJSFは慎重にデータを表示して送信できます。
JSF Guru ... B.回答がバグを解決するのに役立った...ありがとう... – user684434
よろしくお願いします。 – BalusC
今日、GlassFish 3.1.1でViewScope Beanと同じものが見つかりました。私が戻って、送信ボタンを2回押すと、**アクションは実行されません。**ブラウザ(FireFox)は前回の結果を表示します。ボタンコードは ' 'です。検索フォームと結果データテーブルは、同じビューのxhtmlファイルにあります(しかし、faceletsとして含まれます)。私はそれを分析しようとします。 –
mjn