martes, 16 de marzo de 2010

Ajax, Wicket y wicket:container

Hoy es uno de esos días en que te pasas horas intentando conseguir que algo funcione y no hay manera de conseguirlo.
En este caso, era tan simple como hacer que un AjaxLink actualizase los nombres de unas etiquetas en una página de Wicket. Parece simple.


final Label etiqueta = new Label("etiqueta", "texto de la etiqueta");
etiqueta.setOutputMarkupId(true);

add(etiqueta)

AjaxLink<Void> enlace = new AjaxLink<Void>("enlace") {
@Override
public void onClick(AjaxRequestTarget target) {

etiqueta.setDefaultModelObject("nuevo texto");
target.addComponent(etiqueta);
}
};


...pero esto no funcionaba, y al abrir la ventana de Wicket Debug tenía un mensaje parecido al siguiente: wicket ajax Component with id [[etiqueta53]] a was not found while trying to perform markup update, cosa inexplicable.

Tras investigar e investigar me di cuenta de que en el HTML asociado, la etiqueta se añadía de la siguiente forma:


[Texto de la etiqueta]


...y aquí estaba el problema. Realmente no se necesitaba que el texto fuese entre ningún tag especial, como span o div, por eso se utilizó <wicket:container>. El problema es que al no introducirse ningún tag para ese elemento tras la sustitución de valores, tampoco era actualizable vía Ajax. Al cambiar el <wicket:container> por un tag <span>, todo se solucionó.

No hay comentarios:

Publicar un comentario en la entrada