ライフサイクルから理解するJSFの仕組み

2009/06/24 17:43Update
TAGS: JSF | ライフサイクル | 仕組み

JSFアプリケーションのライフサイクルからJSFの仕組みを図で簡単に解説します。

JSFのライフサイクルとは


JSFアプリケーションがリクエストを受け取ってからレスポンスを返すまで一連処理の流れです。

JSFでは、1リクエスト単位のライフサイクルの中に、処理順序が決められていて、この処理単位は「フェーズ」と言います。

JSFライフサイクルにおける6つのフェーズ


JSFライフサイクルでは、6つのフェーズが順に実行されます。
<<図1>>


①Restore View Phase:ビューの復元フェーズ
 リクエストの入り口で、ライフサイクルの第一段階です。このフェーズでは、送信してきた情報に基づいて、ページのUIコンポーネント・ツリーが作成(または復元)されます。

②Apply Request Values Phase:リクエスト値の適用フェーズ
 送信されたフォーム値をUIコンポーネントに適応するフェーズです。その他、ボタン押下などのユーザイベントをqueue(キュー)にセットすることもこのフェーズで行います。
 ※適応できなかった場合、Render Responseフェーズに移動します。

③Process Validation Phase:入力値の検証(バリデーション実行)フェーズ
 このフェーズでは、UIコンポーネントに関連付けられたバリデータ(データ検証)を行います。
 ※バリデータエラーの場合、エラーメッセージを設定し、Render Responseフェーズに移動します。

④Update Model Values Phase:モデル値の更新フェーズ
 このフェーズでは、リクエスト値の適用フェーズでUIコンポーネントと関連付けられた値をモデル(Managed Bean)に更新します。
 ※更新できなかった場合、エラーメッセージを設定し、Render Responseフェーズに移動します。

⑤Invoke Application Phase:アプリケーションの起動フェーズ
 モデル(Managed Bean)のイベントメソッドを起動し、ビジネスロジックを処理するフェーズです。
 ※ビジネスロジックをモデル(Managed Bean)のイベントメソッドから呼び出します。
 ※エラーが発生した場合、エラーメッセージを設定し、Render Responseフェーズに移動します。

⑥Render Response Phase:レスポンスのレンダリング(出力)フェーズ
 処理結果をブラウザーに認識できる形式(HTMLなど)にレンダリングを行い、レスポンスとして返すフェーズです。

<<図2>>


※1:コンポーネントツリーを構築します。
※2:リクエスト値をコンポーネントに適応します。コマンドボタンのimmediate属性はtrue、かつConverterが関連付けられた場合、コンバート処理も行います。
   ちなみに、immediate属性はfalse、Process Validation Phaseで値が妥当の場合、関連付けられたConverterが実行されます。
※3:コンポーネントの値をBackingBean(Managed Bean)に設定します。
※4:Action Eventメソッドを呼び出します。

コンポーネントはJSFアーキテクチャにいかなる中心的な役割を果たしていることがわかります。

しかし、開発者にとって、コンポーネントがどのように実装されているかを知る必要もなく、ビジネスロジック(Model)に集中して開発を進めることができます。

例えば、
次のような簡単なJSP記述で、
<h:inputText value="#{mybean.userId}" />
<h:outputText value="#{mybean.userName}" />
...
<h:commandButton action="#{mybean.onLogin}" />

UIコンポーネント(h:inputText、h:outputText)はManaged Beanのmybeanと自動的に関連付けられ、ボタン(h:commandButton)が押下されると、mybeanのonLogin()も自動的に呼び出されます。

JSFのコンポーネント


JSFでは、標準コンポーネントが提供されるほか、自作のカスタム・コンポーネントも作成できます。
JSFのコンポーネントはタグ(Tag)、コンポーネント(Component)、レンダラ(Renderer)3つの部分から構成されています。

有关作者
Syboos.jp編集長システム設計や開発、保守運営などを行ってます。オープンソース技術に興味があります。

Sponsored Link


Comments