2012-04-12 659 views
5

Me gustaría saber algo sobre wicket apoyando modelos con genéricos. Comprendí los modelos, el modelo de utilería y el modelo compuesto de utilería.¿Cómo funcionan los modelos Wicket con genéricos?

Pero, ¿qué pasa con la clase Model? ¿Qué sucede si hago esto:

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

¿Qué se mostrará en esa etiqueta? ¿Salida de String?

Digamos que tengo lo mismo en un TextField. ¿Qué valor establecerá en ese objeto?

+2

¿Por qué no lo intentas? – bert

Respuesta

7

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>.

+3

Entonces, para resumir: usa el método 'toString()'. Si quieres algo diferente, proporciona tu propio convertidor. – biziclop

Cuestiones relacionadas