Seamの戻るボタン対策

Seamはconversationを管理します。conversationは、実装上は、Stateful Session Beanとして実現されます*1。conversationは、SFSBの@Beginの付いたメソッドによって開始され、@Endの付いたメソッドによって終了されます。この開始時にはconversationは管理対象になり、終了時にはconversationは管理対象からはずされます。

ショッピングカートの例では、最後に「購入」ボタンを押すのがconversationの終了です。通常、「購入」ボタンを押したあとは、「ありがとうございました」ページへ遷移するでしょう。Seamは表示しているViewがどのconversationと対応しているかを知っています。したがって、ここでブラウザの戻るボタンを押した後に、再び「購入」ボタンを実行すると、Seamは終了後のconversationにアクセスが発生したことを検出し「そのconversationはすでに存在しない」ということがわかります。

このように、conversationの管理はSeamがやってくれるので、アプリケーションプログラマは戻るボタン対策をする必要がありません。これがSeamのconversation管理のウリの一つです。

*1:そもそも、EJB仕様書によれば、Stateful Session Beanの定義はconversation stateを保持するEJBです