|
||||||||||
| 1 2 3 次のページ | ||||||||||
| レンダラクラスを作成 | ||||||||||
|
次に、レンダラクラスを作成します。レンダラクラスには、クライアントから送信された値を解析してコンポーネントに格納する処理(decode)、コンポーネントの値をクライアントデバイスに依存した形式で出力する処理(encode)を実装します。レンダラクラス作成の際のポイントは、次のとおりです。
表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に示します。
表2:Rendererクラスで実装するメソッドの仕様 ![]() 図1:レンダラクラスのクラス図 InputDeteRerdererクラスはjavax.faces.Rendererクラスを継承しています。リスト1にレンダラクラス(InputDateRenderer.java)のソースを示します。 リスト1:InputDateRenderer.java(抜粋) |
||||||||||
|
1 2 3 次のページ |
||||||||||
|
|
||||||||||
|
||||||||||
|
|
||||||||||
|
||||||||||



