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

时间:2012-04-12 03:16:33

标签: wicket

我想知道wicket支持模型与泛型的一些事情。我理解模型,道具模型和道具复合模型。

但是Model类怎么样?如果我这样做会发生什么:

Label<Person> label = new Label<Person> ( "someID", new Model<Person>() )

该标签会显示什么? toString输出?

假设我在TextField中有相同的内容。它将在该对象中设置什么价值?

1 个答案:

答案 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,但不是其他方式。因此,如果您想将toStringIModel<Person>一起使用,则需要注册自己的TextField实施。