El código fuente de Wicket está muy bien documentado y se explica por sí mismo. Label
es el uso de getDefaultModelObjectAsString()
Component
que se parecen a esto:
// Get converter
final Class<?> objectClass = modelObject.getClass();
final IConverter converter = getConverter(objectClass);
// Model string from property
final String modelString = converter.convertToString(modelObject, getLocale());
Así que aquí se puede ver que Wicket utiliza un IConverter
para convertir el objeto a un modelo de String
. Si observa la implementación del ConverterLocator
predeterminado, verá que si no ha registrado ningún IConverter
para este tipo de objeto, Wicket utilizará el DefaultConverter
que usa org.apache.wicket.util.lang.Objects
métodos estáticos para convertir el objeto a String
.
El TextField
también utiliza un IConverter
para convertir el objeto a una String
y desde el String
a un objeto nuevo. La diferencia es que Wicket puede convertir siempre una clase desconocida a String
usando el método toString
, pero no a la inversa. Por lo tanto, si desea utilizar un IModel<Person>
con un TextField
, deberá registrar su propia implementación IConverter<Person>
.
¿Por qué no lo intentas? – bert