JSF2開発において、共通部JavaScriptやCSSのキャッシュが残っていることで変更した内容がすぐに反映せず、悪戦苦闘してしまいました。
HTTP、ブラウザの特徴、キャッシュ、クッキーなどなど。
ひとつひとつ理解していく必要がありそうです。
まずは、Firefoxで各ページごとに保有しているキャッシュ情報を取得してみます。
下記のサイトが大変参考になりました!
ふむふむ。アドレスバーに「about:cache」と入力すると、現在のキャッシュ情報の一覧が表示されました!
すばらしい!!! これでいつでも確認できますね♪
さて、JSF2での各ページのキャッシュ制御は、下記のように記述すれば、キャッシュしないページが作れることは理解しておりました。
<f:facet name="first"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Pragma" content="no-cache"/> <meta http-equiv="Cache-Control" content="no-cache"/> <meta http-equiv="Cache-Control" content="no-store"/> <meta http-equiv="Expires" content="0"/> </f:facet>
しかしながら、ページにこの記述を入れても「webapp/resources」に配備しているJavaScript、cssなどはキャッシュされてしまうようです。
Stack Overflowの力を借りて、いろいろ調べていくと・・・
DDの設定であるPROJECT_STAGEは、「Development」ではなく「Production」にしてね。
さらにキャッシュの有効期限の設定は「defaultResourceMaxAge」のパラメータで指定できるよ~、と解釈(合っているのか?)。
さっそく実験してみましょう。
<context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Production</param-value> </context-param> <context-param> <param-name>com.sun.faces.defaultResourceMaxAge</param-name> <param-value>604800000</param-value> <!-- milli Seconds --> </context-param>
ちなみに、defaultResourceMaxAgeのパラメータの初期値(未定義の場合)は、604800000ミリ秒になるらしい。。。1週間です。
まずはdefaultResourceMaxAge指定なしで実施です。
うんうん。確かに今日から1週間先の日付がExpiresに書いてある!
次に、一度キャッシュを消去してから、defaultResourceMaxAgeを3,600,000ミリ秒(1時間)の設定で再度アクセス!
お! 1時間になりました。
あくまでもFirefoxでしか試していないので、半端間がありますが、とりあえずこの方法で運用させていこうかと思っております。