Struts を使用しての IE [戻る] ボタン制御 with PRGパターン
業務用 Web アプリを作る上で、ほぼ必ず出てくる問題としてブラウザの[戻る] ボタンの扱いがあります。業務アプリの場合、ブラウザの [戻る] ボタンを無効にして良い or 欲しいということがあるのですが、普通に実現するには JavaScript を多用したりと結構面倒なようです。
そこで、最近見かける(前からあったのかもしれませんが)方法として、同じ URL に遷移し続けるというのがあります。
いままで表示していた画面と同じ URL を遷移先として指定すると、IE の場合は画面が遷移していないと判断してくれます。これにより、IE に履歴が記録されないため、[戻る] ボタンを無効に出来ます。
ただ、遷移先の URL として常に同じ URL を指定する必要があるため、Web アプリを作る上ではちょっと小細工が必要になります。そこで、IE ではリダイレクトが行なわれた場合、リダイレクト先を遷移先として認識することを利用します。実装の形としては PRG パターンの GET 部分が常に同じ URL になるようにします。
具体的には、Struts を使用する場合は以下のようにします。
- RequestProcessor を継承し、doForward メソッドをオーバーライドする
- doForward メソッド内では JSP へのフォワードをフックし、JSP へはフォワードさせずにフォワード用サーブレットにリダイレクトする。
- 上記フック時に、セッションに JSP の URI を記録しておく
- フォワード用サーブレットではセッションに記録されている JSP にフォワードする
IE からは常に同じフォワード用サーブレットにリダイレクトしているため、URL が変化していないように見えます。こうして、[戻る] ボタンを無効化することが出来ます。