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 使用 aIConverter将模型对象转换为String. 查看默认的实现,ConverterLocator您会发现如果您没有IConverter为这种类型的对象注册任何对象,Wicket 将使用DefaultConverter使用org.apache.wicket.util.lang.Objects静态方法将对象转换为String.

TextField还使用 a将IConverter对象转换为 aString并再次从 theString转换为对象。不同之处在于,Wicket 总是能够String使用该toString方法将未知类转换为 a,但反之则不行。因此,如果您想将 aIModel<Person>与 a一起使用,则TextField需要注册自己的IConverter<Person>实现。

于 2012-04-12T07:11:15.860 回答