2012-04-12 45 views
5

一般的な模型をサポートするモデルについて知りたい。私は、モデル、小道具のモデル、および小道具の複合材のモデルを理解しました。Wicketモデルはジェネリックでどのように機能しますか?

しかし、Modelクラスはどうですか?私はこれを行う場合は何が起こる:

Label<Person> label = new Label<Person> ("someID", new Model<Person>()) 

そのラベルに表示されますか? toString出力?

私はTextFieldで同じことを言います。そのオブジェクトにどのような価値が設定されますか?

+2

なぜあなたは試してみませんか? – bert

答えて

7

Wicketのソースコードは非常によく文書化されており、自明です。あなたは自動改札がStringにモデルオブジェクトを変換するためにIConverterを使用していることがわかりますので、ここで

// Get converter 
final Class<?> objectClass = modelObject.getClass(); 

final IConverter converter = getConverter(objectClass); 

// Model string from property 
final String modelString = converter.convertToString(modelObject, getLocale()); 

Labelは次のようになり、そのComponentからgetDefaultModelObjectAsString()を使用しています。デフォルトのConverterLocatorの実装を見ると、このタイプのオブジェクトにIConverterを登録していない場合、Wicketはを使用してorg.apache.wicket.util.lang.Objectsの静的メソッドを使用してオブジェクトをStringに変換します。

TextFieldは、オブジェクトをStringに、Stringをオブジェクトに再び変換するためにIConverterを使用します。違いは、Wicketは、メソッドを使用して、未知のクラスを常にStringに変換できますが、それ以外の方法はできません。したがって、IModel<Person>TextFieldを使用する場合は、独自のIConverter<Person>実装を登録する必要があります。

+3

これを要約すると、 'toString()'メソッドを使います。別のものが必要な場合は、独自のコンバータを用意してください。 – biziclop