[Wicket-ja-user 34] Re: AutoCompleteTextField での値の取得

Back to archive index

Tsutomu Yano benbr****@mac*****
2008年 3月 7日 (金) 03:02:07 JST


矢野です。

すみませんちょっと「やりたいこと」がよくわからなくなってきましたので確認させてください。

つまり、

・テキストフィールドのモデルオブジェクトとして、ListModelというビーンがある。
・getChoices()の返すイテレータは標準的なケースではStringを返すけども、今回は
 上記のListModelをイテレートしている
・AutoCompleteTextFieldが実際に画面に文字を表示するときには ListModel#toString()の結果を表示している。
・やりたいのは、ここでAutoCompleteで選択肢を選んでサブミットしたときに、Modelには文字列じゃな
 くて、ListModelをセットしてほしい

ということでしょうか。

もしそうであれば、

・AutoCompleteTextFieldのsetType()メソッドを使って、このフィールドのモデルオブジェクトが
 ListModel.classであることを明示する(指定しない場合、WicketはモデルオブジェクトはString
 だと考えます)
・ただしブラウザがサブミットするものはあくまで文字列です。これをListModelに変換するのは
 あなたの仕事です。そのためには、コンポーネントの「getConverter」というメソッドを
 オーバーライドしてください。このメソッド内で文字列をListModelに、ListModelを文字列に変換
 するためのIConverterを作って返却してください。
 WicketはgetConverter()が返すコンバータを使って、オブジェクトを文字列に、文字列をオブジェクト
 に相互変換します。

new AutoCompleteTextField("autoCompleteTextField"){
	IConverter getConveter(Class type) {
		//必要ならtype引数を使ってコンバータを切り替える。
		//ここではtypeは見ない。
		return new IConverter() {
			Object convertToObject(String value, Locale locale) {
				//文字列からListModelを生成して返す
			}

			String convertToString(Object value, Locale locale) {
				//オブジェクトを文字列に変換する。
				return String.valueOf(value);
			}
		}
	}
};


 こんな感じになると思います(すみません動作テストはしてません。あくまでイメージコードだと思って
ください)。

 しかし、このお話ですと、このフィールドはテキストフィールドでありながら決められた項目以外は
入力できないように思います(でなければListModelを作れない)。
 もし決められた項目しか入力できないのであれば、セレクトリスト(コンボボックス)のほうがふさわしい
と思うのですがいかがでしょうか。





---------------------------------------------------
矢野 勉(やの つとむ)
電子メール:benbrand_at_mac.com
---------------------------------------------------




Wicket-ja-user メーリングリストの案内
Back to archive index