我想知道wicket支持模型与泛型的一些事情。我理解模型,道具模型和道具复合模型。
但是Model类怎么样?如果我这样做会发生什么:
Label<Person> label = new Label<Person> ( "someID", new Model<Person>() )
该标签会显示什么? toString输出?
假设我在TextField中有相同的内容。它将在该对象中设置什么价值?
答案 0 :(得分: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
的{{1}}将对象转换为org.apache.wicket.util.lang.Objects
的静态方法。
String
还使用TextField
将对象转换为IConverter
,然后再将String
转换为对象。不同之处在于Wicket能够始终使用String
方法将未知类转换为String
,但不是其他方式。因此,如果您想将toString
与IModel<Person>
一起使用,则需要注册自己的TextField
实施。