2011-09-15 4 views
5

JSF2を使用して、コマンド・ボタンがバッキングBeanにリンクされたフォーム・フィールドを持つページがあります。ブラウザのバック・ボタンで古いバッキングBeanの値がクリアされない

フォームページにアクセスして値を入力して送信すると、バッキングBeanは正しい値を受け取り、次のページに移動します。ブラウザで戻るボタンを押すと、前のページに移動します。フォームに新しい値を入力して送信すると、ステップ1でバッキングBeanは古い値を受け取ります。

答えて

6

これは奇妙です。おそらく、あなたの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をセッションスコープに入れないでください。それらを要求またはビューのスコープに入れます。

+0

JSF Guru ... B.回答がバグを解決するのに役立った...ありがとう... – user684434

+0

よろしくお願いします。 – BalusC

+0

今日、GlassFish 3.1.1でViewScope Beanと同じものが見つかりました。私が戻って、送信ボタンを2回押すと、**アクションは実行されません。**ブラウザ(FireFox)は前回の結果を表示します。ボタンコードは ''です。検索フォームと結果データテーブルは、同じビューのxhtmlファイルにあります(しかし、faceletsとして含まれます)。私はそれを分析しようとします。 – mjn

0

JSF2をグラスフィッシュの仕事で丁寧に学ぶことができます。ビューイングBeanを使用し、ブラウザの戻る/次のリンクを押してもJSFは慎重にデータを表示して送信できます。

関連する問題