SAStrutsの@RemoveSessionを使ったセッション削除タイミング
@RemoveSessionでセッションが削除されるタイミングが想定と違った。
S2frameworkのAPIを見るとこう書いてある。
クラス RemoveSessionInterceptor
メソッドの実行後にHTTPセッションから属性を削除するインターセプタです。
メソッド処理が終わったあとにセッションが消えると思ったのでこんな実装をした。
1.初期表示はindex()が呼ばれる。ここでセッションにあるかもしれない検索条件を削除する。
2.index()では特に何もせず検索用のsearch()にすぐフォワードする。
3.search()が終わったら検索&一覧画面を表示
◎検索と一覧画面(ページング有り)が一体になっている画面のアクションクラス public SearchAction { @Resource public SearchDto searchDto; @Execute(validator = false) @RemoveSession(name="searchDto") public String index() { return "search/1"; } @Execute(validator = false, urlPattern="search/{page}") public String search() { // ・・ページング検索処理・・ searchItems = searchService.search(searchDto, searchForm.page); return "index.jsp"; } }
この時、index()メソッドが終わった後にセッション削除されてsearch()メソッドにフォワードすると思ってた。
想定
index()前
index()後 ←ここでセッション削除
search()前
search()後
でも実際は違っててindex()メソッドに@RemoveSessionを書いてるけどセッション削除されるのはフォワード先のsearch()メソッドの処理が終わった後だった!
実際の動作
index()前
index()後
search()前
search()後 ←ここでセッション削除
という動作だったので検索画面→他のページ→検索画面と遷移すると以前の条件で検索しちゃってたので@RemoveSessionをやめてindex()の中で直接searchDtoを初期化することにした。