[Wicket-ja-user 411] Re: (Ajax)PagingNavigatorでのExpireエラー

Back to archive index

Tsutomu YANO t_yano****@me*****
2010年 2月 1日 (月) 17:02:35 JST


矢野です。

おそらく、ブラウザキャッシュのせいだと思います。Wicketは標準でno-cacheヘッダをつけてレスポンスを返しますが、Firefoxはno-cacheだけではキャッシュ抑止できないらしいです。Firefoxでは、Cache-Controlヘッダにno-storeという設定がされていれば、ブラウザキャッシュの使用を抑止できます。

私のチェックした範囲では、Apple Safariでもno-storeがないとブラウザキャッシュを使用します。Safariがそうだということは、もしかしたらWebKit系は全部そうかもしれません(Google Chromeとか)

ブラウザキャッシュに入ってるHTMLに書かれているURLはすでに存在しないページ番号を指している場合があり、Page Expiredになってしまいます。


対応方法は、WebPageクラスのsetHeader(WebResponse)メソッドをオーバーライドして、ヘッダを書き換えます。

例:
    @Override
    protected void setHeaders(WebResponse response) {
        String userAgent = getWebRequestCycle().getWebRequest().getHttpServletRequest().getHeader("User-Agent");
        if (userAgent != null) {
            String lowerUserAgent = userAgent.toLowerCase();
            if (lowerUserAgent.contains("firefox") || lowerUserAgent.contains("safari")) {
                response.setHeader("Pragma", "no-cache");
                response.setHeader("Cache-Control", "no-cache, max-age=0, must-revalidate, no-store");
                return;
            }
        }
        super.setHeaders(response);
    }

userAgentの判定は適当なので、もっと適切な判定があるかと思います(webkitで判定するとか)
もし作成中のアプリケーションで、全アプリケーションにまたがって使用しているBasePageのようなクラスがあるならば、そこで上記のようにsetHeaderをオーバーライドすればいいでしょう。
私はそのように設定しています。

お試しください。

---------------------
 矢野 勉(やの つとむ) 
t_yano****@me*****
benbr****@mac*****

 
10/02/01 (月曜日) 02:57PM、 "A. Mashida" <mashi****@topic*****>のメッセージ:
>増田と申します。
>
>PageableListViewとAjaxPagingNavigatorを使用していて、以下のような現象が起きています。
>
>1. PageableListViewとAjaxPagingNavigatorを使っているページを表示。
>2. ページ内のリンクから別ページに遷移
>3. ブラウザのバックボタンで戻る
>4. AjaxPagingNavigatorの、ナビゲージョン・リンクをクリック
>5. Page Expire エラーが発生
>
>○現象は、確実に再現します。
>○ただし、バックボタンを使わずにリンクやフォームで遷移して、該当ベージを開いた場合には、
>発生しません。
>○PagingNavigatorでも、同様の現象が起きます。ただし、AJaxPagingNavigatorの場合、
>ページをリロードすると発生しなくなります。
>○Firefox(3.5系)で発生し、IE(8)では発生しません。
>○FirefoxのError Consoleには、syntax errorが出ていますが、そこには、
>
>Error: syntax error
>Source File:
>http://localhost/wicket_test/?wicket:interface=:15:table:navigate:navigation:0:pageLink::IBehaviorListener:0:2&random=0.15720129801295413
>Line: 1, Column: 1
>Source Code:
>-
>
>と表示されており、コンソール内のURLをクリックすると、Expire エラーのページソースが表示されます。
>(エラー個所の表示は空です)。なお指定されているソースの「Line: 1, Column: 1]の内容は
>
><?xml version="1.0" encoding="UTF-8"?>
>
>です。
>
>色々調べましたが、海外のボードで同様の質問があったものの『未回答』でした。
>どのような原因が考えられるでしょうか。よろしく、お願いします。
>
>-- 
>/// A. Mashida ( mashi****@topic***** ) ///
>
>_______________________________________________
>Wicket-ja-user mailing list
>Wicke****@lists*****
>http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user
>
>




Wicket-ja-user メーリングリストの案内
Back to archive index