JBoss Seamのサンプルアプリを試す。その2
昨日に続きhttp://docs.jboss.com/seam/reference/en/html/tutorial.html#d0e493を見ていきます。
4. The web deployment description: web.xml
web.xmlは3.1. Integrating Seam with JSF and your servlet containerにもありますが、
<!-- Seam --> <listener> <listener-class>org.jboss.seam.servlet.SeamListener</listener-class> </listener>
は、Seamアプリケーションには必須だそうです。
残りもSeamアプリケーションでは完全に同じだそうです。
5. The JSF configration: faces-config.xml
Seamアプリケーションはプレゼンテーション層にJSFを使うのでfaces-config.xmlも必須です。
サンプルアプリケーションのregistrationのjsf-config.xml(faces-config.xmlの間違いだと思う。)には一つだけのナビゲーションルールがあるだけです。ManagedBeanの宣言がないことに注目して下さい(Seamアプリケーションには必要ありません)。ManagedBeanはSeamコンポーネントです。Seamアプリケーションに於いてはjsf-config.xml(faces-config.xmlの間違いだと思う。)はJSFのoutcomeにあるアクションの実行結果と表示ページのマッピングによるページ遷移を指定するためだけに使われます。
事実、基本的な記述子をセットしてもSeamアプリケーションに新しい機能を追加してもXMLにページ遷移を書くだけです。SeamはXMLに記述されたプロセスフローと設定データのみからビューを作成します。
6. The view: register.jsp and registered.jsp
SeamアプリケーションのビューページはJSFのサポートする技術を使って実装されています。ここでは開発者に最も馴染みのあるJSPを使っていますしここでは最低限必要とされるものです。(アドバイスとしてはFaceletを使った方が良い)。
7. The EAR deployment descriptor: application.xml
最後に、SeamアプリケーションはEARとしてデプロイされます、デプロイメントディスクリプタも必要です。
このデプロイメントディスクリプタはエンタープライズアーカイブもモジュールとWebアプリケーションのContextRootを/seam-registrationへリンクします。
以上でアプリケーションの全てのファイルを見終わりました。
How it works
-
- フォームが送信されたとき、JSFはSeamへuserと言う名前解決を求めます。
- その名前に値が結びつけられていないときは、Seamはuserコンポーネントをインスタンス化し、Seamのセッションコンテキストを保存した後にUser EntiryBeanのインスタンスをJSFへ返します。
- JSFはUser EntityBeanのプロパティとフォームに入力された値を結び付けます
- 次にJSFはSeamへregisterと言う名前解決を求めます。
- SeamはRegisterActionステートレスセッションビーンをステートレスコンテキスト内に見つけJSFへ返します。
- JSFはActionListenerメソッドのregister()を実行します。
- Seamはメソッドコールに割り込みHibernate ValidatorにSessionBeanのインスタンス(再帰的にUser EntityBeanも)を検査を依頼する前にセッションコンテキストと現在のFacesContextインスタンスからUser EntityBeanに注入にます。
- 状態(値)に問題がないなら,そのまま実行されregister()メソッドが呼ばれます。
- 問題があれば、Seamはnullをoutcomeに返し、JSFページを再表示します。
- JSFが次のJSPページを表示しSeamにuserと言う名前の解決を求めると、Seamセッションスコープから返るUser EntityBeanのプロパティの値を使います。