2011-03-07 11 views
5

Esta pregunta sigue presente: handling to onchange event of AutoCompleteTextField in wicketusando AutoCompleteTextField en portillo sin cadena como el tipo genérico

estoy tratando de utilizar el AutoCompleteTextField con una clase personalizada como el tipo genérico, y añadir una AjaxFormComponentUpdatingBehavior. Lo que quiero decir es que quiero tener un

AutoCompleteTextField<SomeClass> myAutoComplete = ...; 

y después de que añadir un AjaxFormComponentUpdatingBehavior:

myAutoComplete.add(new AjaxFormComponentUpdatingBehavior("onchange") { 

     @Override 
     protected void onUpdate(AjaxRequestTarget target) { 
      System.out.println("Value: "+getValue()); 

     } 
    }); 

El problema es que, por alguna razón, añadiendo que el comportamiento hace que la forma de tratar de establecer el objeto de modelo con una Cadena (aunque AutoCompleteTextField tiene un tipo genérico de SomeClass), causando una ClassCastException cuando se activa el evento onchange.

¿Hay alguna manera de usar AutoCompleteTextField sin que sea AutoCompleteTextField<String>? No pude encontrar ningún ejemplo. ¡Gracias por tu tiempo!

y gracias al usuario biziclop por su ayuda en este asunto.

Respuesta

5

Esto no está relacionado con el controlador de eventos, es causado por la falta de un tipo de modelo establecido en su componente.

componentes de formularios pueden derivar el tipo de modelo de 3 fuentes:

  1. resolverlo automáticamente si está utilizando una PropertyModel o una CompoundPropertyModel.
  2. Lo acepta como un parámetro constructor adicional.
  3. A través del método setType().
  4. (Si ninguna de las circunstancias anteriores, el comportamiento por defecto es el uso de cuerdas, o booleana para casillas de verificación.)

Estos son sus opciones, puede elegir cualquiera de los tres, pero creo que 1 es mejor de 2, que es mejor que

3.

actualización: usted probablemente ya sabe esto, pero si la clase personalizada es realmente personalizada, también necesitará un IConverter que maneja la cadena < -> SomeClass conversiones: se puede o regístrelo con la aplicación o anule el método getConverter(Class<?> clazz) de su componente para devolverlo.

+0

Pero él está utilizando el método 1 con (AutoCompleteTextField myAutoComplete)? – bert

+1

@bert Desafortunadamente, no. Wicket solo resuelve la información de tipo de los modelos que implementan 'IObjectClassAwareModel'. – biziclop

+1

esa Actualización fue la clave. ¡Gracias! –

Cuestiones relacionadas