Wicket 模型如何与泛型一起使用



我想知道一些关于通用检票口支持模型的信息。我了解模型,道具模型和道具复合模型。

但是模型类呢?如果我这样做会发生什么:

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静态方法将对象转换为StringDefaultConverter

TextField还使用IConverter将对象转换为String,然后再次从String转换为对象。不同之处在于,Wicket 始终能够使用 toString 方法将未知类转换为String,但不能以其他方式。因此,如果要将IModel<Person>TextField一起使用,则需要注册自己的IConverter<Person>实现。

最新更新