我想知道一些关于带有通用的检票口支持模型的信息。我了解模型、道具模型和道具复合模型。
但是 Model 类呢?如果我这样做会发生什么:
Label<Person> label = new Label<Person> ( "someID", new Model<Person>() )
该标签将显示什么?toString 输出?
可以说我在 TextField 中有相同的内容。它将在该对象中设置什么值?
我想知道一些关于带有通用的检票口支持模型的信息。我了解模型、道具模型和道具复合模型。
但是 Model 类呢?如果我这样做会发生什么:
Label<Person> label = new Label<Person> ( "someID", new Model<Person>() )
该标签将显示什么?toString 输出?
可以说我在 TextField 中有相同的内容。它将在该对象中设置什么值?
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>
实现。