1.2.2. 動作内容
フォームがサブミットされたとき、 JSF は Seam に
user という名前の変数を解決するよう要求します。 その名前にはまだバインドされた値がないため (どの Seam コンテキストにも)、 Seam は user コンポーネントをインスタンス化し、結果となる User エンティティ Bean インスタンスを Seam セッションコンテキストに保管してからそれを JSF に返します。
フォームの入力値は、
User エンティティで指定された Hibernate Validator 制約に対してデータ整合性検証が行われるようになります。 制約に違反していると JSF はそのページを再表示します。 これ以外は、JSF はフォームの入力値を User エンティティ Bean のプロパティにバインドします。
次に、 JSF は Seam に
register という名前の変数を解決するよう要求します。 Seam は前述した JNDI パターンを使ってステートレスセッション Bean を探し、それを Seam コンポーネントとしてラップしてから返します。 次に Seam がこのコンポーネントを JSF に提示すると JSF は register() アクションリスナーメソッドを呼び出します。
Seam はメソッド呼び出しをインターセプトし、呼び出しが進む前に Seam セッションコンテキストから
User エンティティをインジェクトします。
register() メソッドは入力されたユーザー名が既に存在するかどうかを調べます。 存在した場合、 エラーメッセージは FacesMessages コンポーネントでキューイングされ、 null 結果 が返されてページが再表示されることになります。FacesMessages コンポーネントはメッセージ文字列に組み込まれた JSF 式を補完し、 ビュー に JSF FacesMessage を追加します。
そのユーザー名を持つユーザーが存在しない場合、
"/registered.xhtml"" 結果により registered.xhtml ページへのブラウザリダイレクトが発生します。JSF がページのレンダリングに到達すると、 Seam に user という名前の変数の解決を要求し、 Seam のセッションスコープから返される User エンティティのプロパティ値を使用します。