TOPシステム開発> レンダラクラスを作成




まるごとサーバサイドJava
JDeveloperで学ぶJSF入門

第16回:カスタムコンポーネントの作成(後編)

著者:WINGSプロジェクト  佐藤治夫(株式会社ビープラウド)、
小泉守義

監修:山田祥寛   2006/9/13
1   2  3  次のページ
レンダラクラスを作成

   次に、レンダラクラスを作成します。レンダラクラスには、クライアントから送信された値を解析してコンポーネントに格納する処理(decode)、コンポーネントの値をクライアントデバイスに依存した形式で出力する処理(encode)を実装します。レンダラクラス作成の際のポイントは、次のとおりです。
  1. javax.faces.render.Rendererをextendsする
  2. デコードメソッド(decode()メソッド)をオーバーライドする
  3. エンコードメソッド(encodeBegin()メソッド、encodeChildren()メソッド、encodeEnd()メソッド)を必要に応じてオーバーライドする

表1:レンダラクラス作成の際のポイント

   decode()メソッドでは、context.getExternalContext()メソッドとgetRequestParameterMap()メソッドによりリクエスト値がすべて格納されたjava.util.Mapを取得しています。ここから年月日を取り出し、新たなMapに格納し、UIComponentのsetSubmittedValue()メソッドで、そのMapをコンポーネントに渡しています。

   エンコード系のメソッド(encodeBegin、encodeChildren、encodeEnd)は、日付入力カスタムコンポーネントが入れ子のタグを持ちませんので、encodeEnd()メソッドのみを実装します。レンダリングを行う入れ子のタグを持つ場合は、encodeBegin()メソッドおよびencodeChildren()メソッドを実装してください。

   サンプルのencodeEnd()メソッドではResponseWriterを取得し、ResponseWriterのstartElement()メソッド、writeAttribute()メソッドにより、HTML文字列を出力しています。単にwrite()メソッドでHTMLを出力することもできますが、ResponseWriterに用意されたこれらのメソッドを使用することにより、HTML特殊文字列のエスケープ処理をJSFに任せることができます。

   オーバーライドするメソッドの仕様を表2にまとめます。また、レンダラクラスのクラス図を図1に示します。

メソッド 概要
decode()メソッド
encodeBegin()メソッド
encodeChildren()メソッド
FacesContextに保持されたHTTPリクエストを解析して、UIコンポーネントオブジェクトに設定する
encodeEnd()メソッド UIコンポーネントの値を基に出力をレンダリングする処理を記述する。encodeBegin()メソッドにはタグ開始のレンダリング、encodeChildren()メソッドにはタグの子ノードのレンダリング、encodeEnd()メソッドにはタグ終了のレンダリングを記述する。子ノードの定義をしない場合は、encodeEnd()メソッドだけにレンダリング処理を記述する

表2:Rendererクラスで実装するメソッドの仕様

レンダラクラスのクラス図
図1:レンダラクラスのクラス図

   InputDeteRerdererクラスはjavax.faces.Rendererクラスを継承しています。リスト1にレンダラクラス(InputDateRenderer.java)のソースを示します。

リスト1:InputDateRenderer.java(抜粋)

(画像をクリックすると別ウィンドウに拡大図を表示します)

1   2  3  次のページ

書籍紹介
まるごとサーバサイドJava! Vol.1
まるごとサーバサイドJava! Vol.1 〜初心者からプロまですべての開発者に贈る〜サーバサイドJavaのすべてをまるごと紹介
サーバサイドで実行されるシステム環境Java EEを取り巻く環境は一大変革を遂げようとしています。J2EE時代のEJB(Enterprise Java Beans)からPOJO(Plain Old Java Object)へ、オブジェクト指向からアスペクト指向へ。Sun Microsystems外から発生した新しい流れは本家Java EE 5へ取り入れられる予定です。本書はこうしたJavaの新潮流を余すことなくお伝えします。

発売日:2006/09/01
定価:\2,415(本体 \2,300+税)
著者:WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、小泉守義 監修:山田祥寛
著者プロフィール
著者:WINGSプロジェクト 佐藤治夫(株式会社ビープラウド)、
小泉守義
監修:山田祥寛

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


この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。

INDEX
第16回:カスタムコンポーネントの作成(後編)
レンダラクラスを作成
  UIコンポーネントクラスを作成
  JSF設定ファイルへの登録
JDeveloperで学ぶJSF入門
第1回 JSFの特長
第2回 JSFを構成する要素
第3回 JSFのライフサイクルとStrutsとの比較
第4回 環境設定
第5回 JSFアプリケーションを作成しよう
第6回 情報入力ページの作成
第7回 コマンドボタンの配置と結果出力ページの作成
第8回 バリデータの設定とメッセージの日本語化
第9回 アプリケーションロジックを追加する
第10回 モデルとビューを統合する
第11回 バインディングとテスト
第12回 カスタムバリデータの作成方法〜JSFをより高度に利用するために
第13回 独自のバリデータタグの作成
第14回 カスタムコンバータの作成
第15回 カスタムコンポーネントの作成(前編)
第16回 カスタムコンポーネントの作成(後編)