 |
|
1 2 3 次のページ
|
 |
カスタムコンポーネントの作成方法
|
本連載の最後に、カスタムコンポーネントの作成方法について説明します。カスタムコンポーネントを作成するには、UIコンポーネント、レンダラ、JSFのライフサイクルなどについての理解が必要になるため、バリデータ、コンバータを作成するよりも難易度は若干高くなります。
|
コンポーネントの仕組み
|
カスタムコンポーネントの仕組みは、JSPページ、JSPに配置するタグ、タグハンドラクラス、UIコンポーネントクラス、レンダラクラス、マネージドBeanから構成されます(図1)。

図1:カスタムコンポーネントの仕組み
カスタムコンポーネントの各構成要素の役割を、表1に示します。
構成要素 |
役割 |
タグハンドラクラス |
カスタムタグの属性や要素に設定された値を保持し、カスタムタグに設定された値をUIコンポーネントに設定する |
UIコンポーネントクラス |
画面入力値、カスタムタグの属性や要素に設定された値をUIコンポーネントツリーの中で保持する |
レンダラクラス |
HTTPリクエストで送られてきた値を解析してUIコンポーネントクラスに設定したり、UIコンポーネントクラスから値を取得してクライアントに依存したレスポンスをレンダリングするクラス |
マネージドBean |
コンポーネントのタグからJSFのEL式でバインドされ、値が格納されるクラス |
表1:カスタムコンポーネントの構成要素
|
JSFのライフサイクルとコンポーネント
|
カスタムコンポーネントを作成する場合には、JSFのライフサイクル上で、レンダラ、コンポーネント、マネージドBeanに値が渡されていくタイミングと、各メソッドが呼ばれるタイミングを把握しておくことが大切になります(図2)。

図2:ライフサイクルにおける値の受け渡し (画像をクリックすると別ウィンドウに拡大図を表示します)
レンダラはクライアントから送信された値を解析(decode)し、コンポーネントに設定します。また、コンポーネントの値はマネージドBeanに設定されます。
これらの値の受け渡しのタイミングは、JSFのライフサイクルの仕様によって定義されています。JSFのライフサイクルのおける、UIコンポーネントやマネージドBeanへの値の受け渡しのタイミングを表2にまとめました。
JSFライフサイクル上のフェーズ |
実行される処理 |
Restore View |
UIコンポーネントツリーが作成されるフェーズ。UIコンポーネント内のrestoreState()メソッドが呼ばれ、入力元画面のUIコンポーネントが復元される |
Apply Request Values |
クライアントから送信されたリクエスト値がコンポーネントに反映されるフェーズ。UIViewRoot#processDecodes()メソッドが呼び出され、レンダラによりリクエスト値が解析され、UIコンポーネントに設定される |
Process Validations |
バリデータが起動され、検証処理が行われるフェーズ。UIViewRoot#processValidators()メソッドが呼び出され、バリデータが実行されます。また変換もこのフェーズで行われる |
Update Model Values |
コンポーネント値がマネージドBeanに格納される。UIViewRoot#processUpdates()メソッドが呼び出される。その中でUIComponentのupdateModel()メソッドが呼び出され、マネージドBeanにコンポーネントの値が反映される |
Invoke Application |
コマンドボタンやリンクにバインドされたマネージドBeanのメソッドが起動されるフェーズ。UIViewRoot#processApplication()メソッドが呼び出され、処理が起動されます。この処理結果にしたがい、画面遷移処理が行われる |
Render Response |
レンダラのエンコード系のメソッドにより、クライアントに依存したレスポンスが出力される。レスポンス出力後UIコンポーネントのsaveState()メソッドが呼ばれ、UIコンポーネントの状態が保存される |
表2:JSFのライフサイクルと実行される処理
|
1 2 3 次のページ
|
|

|
著者プロフィール
著者:WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、 小泉守義
監修:山田祥寛
WINGSプロジェクトは、有限会社WINGSプロジェクト(代表取締役山田祥寛)が運営するライティング・チーム。海外記事の翻訳から、主にサーバサイド分野の書籍/雑誌/Web記事の執筆、講演、アプリケーション開発などを幅広く手がける。2006年7月時点での登録メンバーは20名で、現在も一緒に執筆をできる有志を募集中。執筆に興味のある方は、どしどし応募いただきたい。
|
|
|
|