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 ---------------------------------------------------