- PR -

JSFでカスタムコンポーネントを作成する方法

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/04/20
投稿数: 69
投稿日時: 2006-07-02 22:26
いつもお世話になっています。
JSFでカスタムコンポーネントを作成する方法について悩んでいます。
ご相談にのってください。

・Date型のデータ(Beanのプロパティ)を年、月、日の3つに分解し、それぞれコンボボックスに展開させる。
・年、月、日のコンボボックスの選択値を結合してDate型のデータとし、BeanへBindingする。

上記のようなカスタムコンポーネントを作成したいのですが、設計で行き詰っています。
今、考えている大まかな設計は以下のようなものなのですが、選択値が変わったときにBeanのプロパティにバインディングするにはどうしたらよいかわかりません。
どうぞアドバイスよろしくお願いいたします。


[JSP]
・TLDの使用宣言
・使用
 <mycomponent:dateCombo value = "#{×××.date}"/>

[カスタムコンポーネントクラス]
・private宣言
 Date型の年月日
・getFamily()メソッド
・setter/getter
 ValueBindingのgetValue()メソッドを使用
・コンポーネントの状態を保存・復元するためのsaveState()メソッド、restoreState()メソッド

[レンダラクラス]
・private宣言
 String型の年、月、日を定義
・encode()メソッド
 クライアントから送られてきたDate型のデータを取得し、年、月、日の3つに分解
 年リスト、月リスト、日リストを格納したコンボボックスを作成し、分解した3つをデフォルトとして表示

[タグハンドラクラス]
・getComponentType()メソッド
・getRendererType()メソッド
・setProperties()メソッド
 コンポーネントのsetValueBinding()メソッドを使用

[JSF設定ファイル]
※省略します。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-07-03 11:51
引用:

今、考えている大まかな設計は以下のようなものなのですが、選択値が変わったときにBeanのプロパティにバインディングするにはどうしたらよいかわかりません。
[レンダラクラス]
・private宣言
 String型の年、月、日を定義
・encode()メソッド
 クライアントから送られてきたDate型のデータを取得し、年、月、日の3つに分解
 年リスト、月リスト、日リストを格納したコンボボックスを作成し、分解した3つをデフォルトとして表示


encodeメソッドというのはレンダラには無いですが、encodeBeginのことですか。
encodeBeginを作ったら、それに対応するdecodeを作らないといけません。
ばらばらになって送られてくる年・月・日をコンポーネントに反映しなければいけないでしょう。
あとはgetLocalValueとsetLocalValueをオーバーライドすればいいかな。
未記入
ベテラン
会議室デビュー日: 2005/04/20
投稿数: 69
投稿日時: 2006-07-04 11:11
はい、すみません、encodeBeginメソッドのことです。

アドバイスどおり、decodeメソッドを作成しました。
EditableValueHolderインターフェースのsetSubmittedValueメソッドを使って代入することで、バリューバインディングできました!!

ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)