ShowTable of Contents
JSF は Web アプリケーションのユーザーインターフェース構築を容易にするために開発されたJava EE 標準のフレームワークです。
XPages では、この JSF をバックグラウンドのフレームワークとして採用しています。
JSF のライフサイクル
JSF では、アプリケーションが HTTP リクエストを受け取ってからレスポンスを返すまでのライフサイクルを、
次の6つのフェーズに分けて定義しています。
- Restore View フェーズ
リクエストされたページの UI コンポーネントツリー構造を作成または復元します。
- Apply Request Values フェーズ
送信されてきた値を、対応する UI コンポーネントに適用します。
- Process Validation フェーズ
適用された値を、UI コンポーネントに対応付けられたバリデータにより検証します。
- Update Model Values フェーズ
検証された値により、UI コンポーネントに対応付けられたモデルを更新します。
- Invoke Application フェーズ
モデルが持つビジネスロジックを実行します。
- Render Response フェーズ
処理結果を、ブラウザにレンダリングできる形(HTML)に変換し、レスポンスします。
XPages における JSF のライフサイクル
これらのフェーズを XPages 開発者の視点から説明し直すと、次のようになります。
Restore View フェーズ
XPages の各ページは、ラベルや編集ボックスなど、さまざまなコントロールを階層的に組み合わせて定義されています。
実行時には、この構造を表現するコンポーネントツリーがページ情報を表すオブジェクトとして構築されます。
始めてページがアクセスされた際には、このコンポーネントツリーが新規に作成されます。
リクエストに対する処理がすべて終わった後、次のアクセスに備えてコンポーネントツリーがページキャッシュに保存されます。
その後、部分更新などにより同じページに対して処理が継続される際には、更新が発生するたびに
保存されてるコンポーネントツリーが呼び戻され、それに対して新たなリクエストの処理が適用されます。
Restore View フェーズでは、このコンポーネントツリーの新規作成や保存したツリーの呼び戻しを行います。
ページイベントとしては、beforePageLoad/afterPageLoad/afterRestoreView イベントがこのフェースの前後に実行されます。
Apply Request Values フェーズ
編集ボックスコントロールなど入力値を受け取るコントロールに対して、ブラウザからフォーム入力値として送信されてきた
値を引き渡します。
対応する各コントロールは未検証の値なので「仮」に受け取ります。
Process Validation フェーズ
XPages では、入力系コントロールには妥当性検査のプロパティを設定することが出来ます。
数値のみ、最大/最小長、一定のパターンに一致するなど、さまざまな条件を指定できます。
このフェーズでは、Apply Request Values フェーズで「仮」に受け取った値に対して、指定された妥当性検査を行います。
すべて検査にパスした場合には、次の Update Model Values に進みます。
エラーがあった場合には、Render Response フェーズにジャンプしてエラー表示を行います。
Update Model Values フェーズ
Process Validation フェーズで検証済みの入力値を「正式」に受け入れ、コントロールの値とします。
Invoke Application フェーズ
入力値の受け入れが終わったコントロールが持つ処理ロジックを実行します。具体的には、各コントロールの onClick などのイベントに
割り当てられた JavaScript などのアクションを実行します。
Render Response フェーズ
すべての処理が完了した後、最終的なコンポーネントツリーから、ブラウザにレスポンスとして返す HTML を生成します。
ページイベントとしては、beforeRenderResponse/afterRenderResponse イベントがこのフェースの前後に実行されます。
XPageとカスタムコントロールのページイベント
XPageやカスタムコントロールには、それぞれ次のページイベントが用意されています。
- beforePageLoad
- afterPageLoad
- afterRestoreView
- beforeRenderResponse
- afterRenderResponse
これらがライフサイクルのどのタイミングでどういった順序で実行されるかをまとめます。
サンプルに利用するのは、以下のようなXPageです。2つのカスタムコントロールが配置されています。
これらのページイベントは、次の順序で実行されます。
新規アクセスか継続アクセスかにより、PageLoad か RestoreView のいずれかのイベントが実行されています。
カスタムコントロールと組み合わされた際のそれぞれのイベントの実行順序にも注意してください。
この記事には続編があります。
XPages における JSF ライフサイクル - コントロールプロパティ評価のタイミング