[Seasar-user:2542] [S2JSF]同じページを繰り返し表示する場合の戻るボタンの動作について

Sea Slug seaslug
2005年 8月 30日 (火) 14:04:18 JST


はじめまして、竹田と申します。

S2JSFを利用して検索結果をn件ずつ表示するページを作ろうとしています。

たとえば11件の検索結果を10件ずつ表示する場合、はじめは10件だけ表示
され、「次」ボタンをクリックすると最後の1件が表示されるという感じです。
現在は検索結果を表示するページをひとつ用意し、表示開始位置をセッション
変数として持つことで実現しています。

しかし、ここでひとつ困ったことに出くわしました。はじめの10件を表示した後、
「次」ボタンをクリックして最後の1件を表示させ、その後にブラウザの「戻る」
ボタンで戻ってはじめの10件を表示させたとき、2件目以降の検索結果に
関連するActionを起動しようとしても、1回目は無視されはじめの10件が
再描画されます(再描画後は普通にActionは起動します)。

この問題を解決するためのお知恵をどなたかお持ちではないでしょうか?

以下、長くなりますが私なりに調べたことについて書きます。

ひがさんのブログ(http://d.hatena.ne.jp/higayasuo/20050126)にある
とおり、この問題に関連する問題はS2JSFですでに解決しています。
ソースを見る限り、ページを描画する際に、ページ毎(viewId毎)のビュー
をセッションに保存しておき、「RestoreViewフェーズ」でセッションからペー
ジ(viewId)をキーにビューを検索し再構成することで、ページをまたがって
戻る場合の問題を解決しているようです(間違っていたらごめんなさい)。

なるほど、と思い、自分なりにS2JSFに手を加えて、リクエスト毎にIdを発
行し、そのIdを元にセッションにビューを保存、検索することで同じページ
に戻る場合にでも以前のビューを再構成できるようにしました。

ところが以前のビューを再構成できても、次の「ApplyRequestValues
フェーズ」で、イベントを正しく検知することができず、結果は同じでした。

先ほどの例ですと、ビューは再構成されたことにより検索結果の数は
10件になっているのですが、検索結果を表示するためのForEachにバ
インドされたリスト変数の要素数は、最後の1件を表示した状態のま
まなので、1となります。ApplyRequestValuesはバインドされたリストの
要素数分しか処理しないので、2件目以降をクリックしたなどのイベン
トは検知されません。そのためActionは無視され再描画されます。

「ApplyRequestValuesフェーズ」以前にForEachにバインドされたリスト
変数を何らかの形で変更できればよいのかも知れませんが、あまりきれ
いな方法に思えません(なんとなくですが)。

戻るボタンが常に正常に機能する必要はないとは思います(削除した
はずのオブジェクトに対して操作できたりとかしますので)。ただ、一番初
めに書いた利用シーンって結構あると思うのですが、みなさんどうされて
いるのでしょうか?

_________________________________________________________________
ウィルス駆除も無料の 「MSN Hotmail」  http://www.hotmail.com/ 




Seasar-user メーリングリストの案内