5

ジェネリックを使用したウィケット対応モデルについて知りたいです。モデル、プロップ モデル、プロップ コンパウンド モデルを理解しました。

しかし、Model クラスはどうでしょうか。これを行うとどうなりますか:

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

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

TextField にも同じものがあるとしましょう。そのオブジェクトにどのような値を設定しますか?

4

1 に答える 1

7

Wicketのソースコードは非常によく文書化されており、自明です。このように見えるからLabel使用しています:getDefaultModelObjectAsString()Component

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

final IConverter converter = getConverter(objectClass);

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

したがって、ここでは、Wicketがを使用しIConverterてモデルオブジェクトをに変換していることがわかりますString。デフォルトの実装を見ると、このタイプのオブジェクトにConverterLocator何も登録していない場合IConverter、Wicketは静的メソッドをDefaultConverter使用org.apache.wicket.util.lang.Objectsしてオブジェクトをに変換するを使用することがわかりますString

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

于 2012-04-12T07:11:15.860 に答える