TOP
>
システム開発
> TLDファイル、タグハンドラクラスの作成
JDeveloperで学ぶJSF入門
第15回:カスタムコンポーネントの作成(前編)
著者:
WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、
小泉守義
監修:
山田祥寛
2006/9/8
前のページ
1
2
3
TLDファイル、タグハンドラクラスの作成
タグを定義したTLDファイル(jsf_date.tld)をリスト1に示します(注1)。
リスト1:jsf_date.tld(抜粋)
(画像をクリックすると別ウィンドウに拡大図を表示します)
※注1:
UIInputクラスは、ほかにも属性としてrequired、immediate、action、binding、actionListenerなどを持ちますが、本サンプルでは使用しないため省略しました
TLDファイルを定義したら、次にタグハンドラクラスを作成します。JSFのカスタムコンポーネント対応のタグハンドラクラスを作成する際のポイントは、次のとおりです。
javax.faces.webapp.UIComponentTagまたは、javax.faces.webapp.UIComponentBodyTagクラスをextendsしたクラスの作成
TLDファイルに定義した属性に対応するセッターメソッドの実装
getComponentType()、getRendererType()、setProperties()の3つのメソッドを実装(各メソッドの仕様については表6を参照)
表5:タグハンドラクラスを作成する際のポイント
メソッド名
説明
getComponentType
JSF設定ファイルで指定する「component-type」と同じ値を返す
getRendererType
JSF設定ファイルで指定する「renderer-type」と同じ値を返す
setProperties
各インスタンス変数に設定された値をUIコンポーネントに設定する処理を実装する
表6:タグハンドラクラスで実装するメソッド
日付入力コンポーネントのタグハンドラクラスのクラス図を図4に示します。タグハンドラクラスは、JSFが用意しているjavax.faces.webapp.UIComponentBodyTagクラスをextendsしています。UIComponentBodyTagクラスには、UIComponentのタグハンドラのための基本的なメソッド、属性が実装されています。
図4:タグハンドラクラスのクラス図
次に、タグハンドラクラス(InputDateTag.java)を作成します(リスト2)。
リスト2:InputDateTag.java(抜粋)
(画像をクリックすると別ウィンドウに拡大図を表示します)
タグハンドラクラスの作成する際のポイントは、次のとおりです。
1. value属性
インスタンス変数とそのセッター/ゲッターメソッドを定義しています。
2. getComponentType()メソッド/getRendererType()メソッド
この2つのメソッドは、UIComponentTagクラスの抽象メソッドなので、実タグクラスで実装します。getComponentType()メソッドは使用するコンポーネントのタイプ名、getRendererType()メソッドは使用するレンダラのタイプ名を返す必要があります。このタイプ名は、JSF設定ファイルに定義されるタイプ名と同じ文字列です。このメソッドがJSFから呼ばれることにより、タグクラス、コンポーネントクラス、レンダラクラスの関連付けが認識されます。
3. setProperties()メソッド
タグの属性値をコンポーネントに反映します。isValueReference()メソッドで、タグの値がバインド式かどうかを判定して、バインド式の場合はUIコンポーネントにValueBindingクラスのインスタンスをセットしています。
次回はレンダラクラスとUIコンポーネントクラスを作成し、JSF設定ファイルへ登録を行います。
前のページ
1
2
3
著者プロフィール
著者:WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、
小泉守義
監修:山田祥寛
WINGSプロジェクトは、有限会社WINGSプロジェクト(代表取締役山田祥寛)が運営するライティング・チーム。海外記事の翻訳から、主にサーバサイド分野の書籍/雑誌/Web記事の執筆、講演、アプリケーション開発などを幅広く手がける。2006年7月時点での登録メンバーは20名で、現在も一緒に執筆をできる有志を募集中。執筆に興味のある方は、どしどし応募いただきたい。
INDEX
第15回:カスタムコンポーネントの作成(前編)
カスタムコンポーネントの作成方法
カスタムコンポーネントのサンプルアプリケーション
TLDファイル、タグハンドラクラスの作成