Extension - 概念 - ライフサイクル

Teeda Extensionは, ブラウザからのリクエストに応じてページクラスのメソッドを呼び出します. このメソッドをライフサイクルメソッドと呼びます.

ライフサイクルメソッドには次のものがあります.

initialize() メソッドは, 画面が最初に表示されるときや, 他の画面から遷移 (REDIRECT) してきたときに呼び出されるメソッドです.

initialize() メソッドは次の規約に従います.

可視性
public
メソッド名
initialize
引数
なし
戻り値型
ClassString または void のいずれか

initialize() メソッドは, ポストバック では呼び出されません.

do~() メソッドは, フォームがサブミットされた場合 ( ポストバック ) に呼び出されるメソッドです.

do~() メソッドは次の規約に従います.

可視性
public
メソッド名
do で始まる
引数
なし
戻り値型
ClassString または void のいずれか

do~() メソッドは, サブミットボタンに対応付けられ, 対応するボタンが押された場合のみ呼び出されます ( 詳細 ).

]]>

do~() メソッドは, ポストバックでない場合や, バリデーションでエラーがあった場合は呼び出されません.

prerender() メソッドは, 画面が描画される直前に呼び出されるメソッドです.

prerender() メソッドは次の規約に従います.

可視性
public
メソッド名
prerender
引数
なし
戻り値型
ClassString または void のいずれか

prerender() メソッドは, 画面遷移 (リダイレクト) する場合は呼び出されません.

Teeda Extensionでは, ブラウザから受け取ったリクエストの基本的な処理パターンが4つあります.

リクエストパターン
初期表示
ブックマークやリンクがクリックされたことによるリクエストです.
ポストバック (自画面表示)
表示している画面のフォームがサブミットされたことによるリクエストです. 画面遷移せずに同じ画面を表示します.
ポストバック (リダイレクト)
表示している画面のフォームがサブミットされたことによるリクエストです. do~()メソッドの戻り値で指定された画面に遷移 (リダイレクト) します.
リダイレクト表示
リダイレクトによるリクエストです.

リクエストパターン ごとに, どのライフサイクルメソッドが呼び出されるかを説明します.

初期表示では, initialize() および prerender() メソッドが呼び出されます.

初期表示

ポストバック (自画面表示) では, do~() メソッドおよび prerender() メソッドが呼び出されます.

ポストバック (自画面表示)

バリデーションでエラーがあった場合は prerender() メソッドだけが呼び出されます.

ポストバック (リダイレクト) では, do~() メソッドのみが呼び出されます. do~() メソッドの戻り値で指定された画面へリダイレクトします.

ポストバック (リダイレクト)

バリデーションでエラーがあった場合は ポストバック(自画面表示) になります.

リダイレクト表示では, initialize() および prerender() メソッドが呼び出されます.

リダイレクト表示

ライフサイクルメソッドは,戻り値型を Class または String 型にすることができます (間違いにくさやリファクタリングのしやすさから Class 型を推奨します).

次画面のページクラスまたはそのコンポーネント名を戻り値とすることで, その画面に遷移 (リダイレクト) します.

戻り値が null だと画面遷移 (リダイレクト) しないで直接自画面を表示します.

戻り値をそのページクラス自身 (またはそのコンポーネント名) にすると, リダイレクトして同じページを表示します. この場合は遷移先が現在の画面と同じというだけで, 画面遷移として扱われます.

画面遷移 (リダイレクト) しない場合は戻り値の型を void にすることもできます.

JSFのライフサイクルと, ページクラスのライフサイクルメソッドおよびsetter/getterメソッド呼び出しの関係は, 以下のようになります.

JSFライフサイクルとの関係