- - PR -
JSFでカスタムコンポーネントを作成する方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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設定ファイル] ※省略します。 | ||||
|
投稿日時: 2006-07-03 11:51
encodeメソッドというのはレンダラには無いですが、encodeBeginのことですか。 encodeBeginを作ったら、それに対応するdecodeを作らないといけません。 ばらばらになって送られてくる年・月・日をコンポーネントに反映しなければいけないでしょう。 あとはgetLocalValueとsetLocalValueをオーバーライドすればいいかな。 | ||||
|
投稿日時: 2006-07-04 11:11
はい、すみません、encodeBeginメソッドのことです。
アドバイスどおり、decodeメソッドを作成しました。 EditableValueHolderインターフェースのsetSubmittedValueメソッドを使って代入することで、バリューバインディングできました!! ありがとうございました! |
1