1.3.2. 動作内容
最初に
messages.jsp ページに移動すると、 ページは messageList コンテキスト変数を解決しようとします。 この変数はまだ初期化されていないため、 Seam はファクトリメソッド findMessages() を呼び出します。 これがデータベースに問い合わせを行い DataModel を読み出します。 これにより <h:dataTable> の表示に必要な行データが提供されます。
ユーザーが
<h:commandLink> をクリックすると、 JSF は select() アクションリスナーを呼び出します。 Seam はこの呼び出しをインターセプトして、選択された行データを messageManager コンポーネントの message 属性にインジェクトします。 アクションリスナーが実行され、 選択された Message に既読マークを付けます。 呼び出しの終わりに、 Seam は選択された Message を message コンテキスト変数にアウトジェクトします。 次に、 EJB コンテナはトランザクションをコミットし、 Message に対する変更がデータベースにフラッシュされます。 最後に、 このページが再度レンダリングされてメッセージ一覧を再表示、 その下に選択されたメッセージが表示されます。
ユーザーが
<h:commandButton> をクリックすると、 JSF は delete() アクションリスナーを呼び出します。 Seam はこの呼び出しをインターセプトし、 選択された行データを messageList コンポーネントの message 属性にインジェクトします。 アクションリスナーが起動し、 選択された Message を一覧から削除、 EntityManager の remove() を呼び出します。 呼び出しの終わりに、 Seam は messageList コンテキスト変数を更新し、 message コンテキスト変数を消去します。 EJB コンテナはトランザクションをコミットし、 データベースから Message を削除します。 最後に、 このページが再度レンダリングされ、 メッセージ一覧を再表示します。