• 検索結果がありません。

ライフサイクルの詳細

ドキュメント内 1 JSF JSF JSF MVC 2 We (ページ 93-98)

第 8 章 Component Binding 61

10.4 ライフサイクルの詳細

それでは、

guessNumber

サンプルアプリケーションの動作を確認しながら、ライフサイ クルの各フェーズの動きを追ってみましょう。

guessNumber

サンプルアプリケーションは、第1回

(2005

1

月号

)

でもご紹介したよ うに、

Duke

くんが考えている数を当ててみるアプリケーションです

(

10.3

参照

)

ここでは、

Web

ブラウザで

0

10

までの数を入力して

”Submit”

ボタンを押すと

Web

ブ ラウザから

JSF

のアプリケーションに対してリクエストが行われます。その後でレスポン スとして「あたり」か「はずれ」の画面が出力されます。このリクエストからレスポンス にいたるまでのライフサイクルについて見ていきます。

10.3: guessNumber

の動作

10.4.1 (1)

ビューの復元

Web

ブラウザからのリクエストがあって

JSF

のアプリケーションが呼ばれた場合、ラ イフサイクルはこのフェーズからはじまります。

このフェーズには、次の2つのパターンがあります。

この

JSF

アプリケーションに対する、最初のリクエストである場合

JSF

アプリケーション内でのページ遷移によって、

JSF

ページにアクセスがあった 場合

Web

ブラウザからのリクエストが、この

JSF

アプリケーションに対する、最初のリク エストである場合には、次のような手順で処理が実行されます。

1.

空の

UI

コンポーネント・ツリーを生成

2.

(6)

レスポンスのレンダリング」フェーズに移る

JSF

アプリケーション内でのページ遷移によって、

JSF

ページにアクセスがあった場合 には、

1.

サーバかクライアントから、保存されている

UI

コンポーネント・ツリーを復元 という処理が行われます。

guessNumber

では、前掲の図

10.1

の画面に対応する、図

10.2

のような

UI

コンポーネ ント・ツリーが復元されます。

10.4.2 (2)

リクエスト値の適用

このフェーズでは、リクエストのパラメータ情報を、

UI

コンポーネント・ツリーに設定 します。

guessNumber

の場合、図

10.1

のように、

h:inputText

タグに入力された

”9”

UIInput

にセットされるのです。

アクションイベント

h:commandButton

h:commandLink

が押された場合、アクションイベントが発生し て、アクションイベントが「イベント・キュー」に蓄えられます。

このとき、これらのイベントをどのフェーズで処理するか、アプリケーション制作者が 調整できます。

JSP

での

h:commandButton

タグで、以下のように

immediate

属性の値が

true

になっ ているとき、アクションリスナへの通知とアクションの実行は、このフェーズで行われま

す。これ以降のフェーズ

(Managed Bean

への値の設定など

)

を実行せずとも処理できるの で、キャンセルボタンなどの実現に使われます。

<h:commandButton immediate="true"

action="cancel" value="キャンセル" />

immediate

属性の値が

false

のとき、アクションリスナへの通知とアクションの実行は、

(5)

アプリケーションの起動」フェーズで行われます。

immediate

属性を指定しなかった ときのデフォルト値は

false

になります。

Value Change イベント

<h:inputText immediate="true" value="#{bean.quantity}" />

h:inputText

などで値が変更された場合、

immediate

属性の値が

true

のとき、このフェー ズで当該コンポーネントに関する次の処理が行われます。

1.

コンバータ

2.

バリデータ

3. Managed Bean

のプロパティへの値のセット

4. Value Change

リスナの実行

immediate

属性の値が

false

のとき、

Value Change

リスナへの通知とリスナの実行は、

(5)

アプリケーションの起動」フェーズで行われます。

immediate

属性を指定しなかった ときのデフォルト値は

false

になります。

10.4.3 (3)

入力値の検証

バリデータが設定されているときに実行されます。

(必要があれば)まずコンバータを実行します。その後でバリデータを実行します。

バリデータが成功なら、

Value Change

イベントがイベントキューに蓄えられます。失 敗なら、「

(6)

レスポンスのレンダリング」フェーズに移ります。

guessNumber

では、

Validator

である

UserNumberBean.validate

メソッドを実行してい ます。

10.4.4 (4)

モデル値の更新

このフェーズでは、

UI

コンポーネント・ツリーの値を

Managed Bean

のプロパティに セットします。

必要があれば、まずコンバータを実行します。コンバータに失敗したら、「

(6)

レスポン スのレンダリング」フェーズに移ります。

その後で、

Value Binding

式で指定された

Managed Bean

のプロパティに、

UI

コンポー ネントの値をセットします。

guessNumber

の場合には、

h:inputText

Value Binding

式で指定されている

userNum-ber

プロパティは

Integer

型になります。そこで、まずコンバータを実行して、入力データ を

Integer

に変換します。その後で

userNumber

プロパティに格納するのです。

10.4.5 (5)

アプリケーションの起動

このフェーズでは、まずこれまでイベントキューに蓄積されたアクションイベントと

Value Change

イベントを、それぞれのイベントに通知します。

その後で

Action Method

を実行します。

そして、次の遷移先が決まります。

guessNumber

では、

action

属性の値と

faces-config.xml

での設定によって、次の画面遷 移先が決まります。

<h:commandButton id="submit" action="success" value="Submit" />

10.4.6 (6)

レスポンスのレンダリング

このフェーズでは、遷移先画面の

UI

コンポーネントツリーから、ブラウザに返すレス ポンスを生成する処理を行います。

そのためには、まず遷移先画面がどこかわかっている必要があります。しかし、これま でのフェーズで、次はどの画面に移り変わるかわかっているはずです。

通常は「

(5)

アプリケーションの起動」で遷移先が決まります。しかし、次のようなケー スでは、エラーが起きているため、元の画面にとどまる場合もあります。

(3)

入力値の検証」でエラーが起きた。

(4)

モデル値の更新」でエラーが起きた。

遷移先が決定すると、次の順番で処理が行われます。

1.

遷移先に移り変わる。

ドキュメント内 1 JSF JSF JSF MVC 2 We (ページ 93-98)

関連したドキュメント