我想知道一些关于通用检票口支持模型的信息。我了解模型,道具模型和道具复合模型。
但是模型类呢?如果我这样做会发生什么:
Label<Person> label = new Label<Person> ( "someID", new Model<Person>() )
该标签中将显示什么? toString 输出?
假设我在文本字段中有相同的内容。它将在该对象中设置什么值?
Wicket的源代码有很好的文档记录,不言自明。 Label
使用的是如下所示的Component
getDefaultModelObjectAsString()
:
// 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 将使用使用org.apache.wicket.util.lang.Objects
静态方法将对象转换为String
的DefaultConverter
。
TextField
还使用IConverter
将对象转换为String
,然后再次从String
转换为对象。不同之处在于,Wicket 始终能够使用 toString
方法将未知类转换为String
,但不能以其他方式。因此,如果要将IModel<Person>
与TextField
一起使用,则需要注册自己的IConverter<Person>
实现。