2010-01-16 27 views
8

Si escribo¿Por qué Wicket cambia la identificación de los elementos html?

<form wicket:id="form" id="form> 

o incluso

<form wicket:id="form>... 

A continuación, el HTML representado muestra la 'forma' Identificación del apéndice con diferentes números cada vez que se actualiza la página, por ejemplo,

<form id="form7".... 

¿Hay alguna manera de deshabilitar este comportamiento del marco de Wicket?

Respuesta

7

Este es el comportamiento que desea en la mayoría de los casos al usar wicket. La identificación dinámica está destinada a evitar colisiones de id. Cuando los comportamientos de Ajax se agregan a los componentes o se agregan a las respuestas de Ajax para su actualización. Para cualquiera de estas situaciones, realmente necesita que tanto la respuesta del cliente como el estado del lado del servidor estén en connivencia. Si hay recursos js externos, necesita la identificación de un componente para la búsqueda dom, entonces sugiero agregar un comportamiento wicket componente personalizado que luego generaría la llamada js a una función que pasa en el ID generado.

Me doy cuenta de que lo que voy a describir te lleva más al bosque de Wicket. Pero he estado más que feliz con las cosas ajax que Wicket te abre de la caja.

+0

¿Es una norma de Wicket escribir incluso Javascript en los archivos Java? –

+0

Como todo lo demás, lamentablemente, depende. Hay ejemplos para las bibliotecas de JS (wicket-ajax.js por ejemplo) y JS generado desde dentro de Java. El código fuente de Wicket debe tener ejemplos de ambos. En última instancia, casi cualquier comportamiento estándar de ajax en algún momento incluirá un colaborador de cabecera estándar para incluir el archivo wicket-ajax.js.Echa un vistazo a algunos de los componentes de Ajax para ver JS generados, muchos tendrán un método de obtención de js o algo para adjuntar al componente al que se agrega. – Matt

+0

@Monis: Prefiero poner la cantidad * mínima * de JS en el código de Java, normalmente solo una llamada a una función en un archivo .js separado. [Un ejemplo] (http://stackoverflow.com/a/8848464/56285). – Jonik

0

ha sido un tiempo desde que trabajé con Wicket, pero recuerdo que cuando portillo utiliza elementos ajax, sus id s son auto-generado (la id de la etiqueta, no el wicket:id). Puede controlar la identificación de la etiqueta cuando no se usa y el elemento ajax. En su caso, dado que no hay código, supongo que tendrá que cambiar cualquier AjaxButton o Ajax* de su formulario.

+0

Los problemas que estoy enfrentando con estos identificadores cambiantes están en el lado del cliente, como que mi CSS no puede usar estos identificadores para asignar los estilos, no puedo escribir javascript que juegue con los identificadores de elementos. –

+1

@Monis Iqbal Se supone que debes usar los ganchos Ajax de Wicket, etc. directamente. – Esko

+0

lo que significa que no puedo escribir javascript personalizado? ¿No es esta violación de SOC que Wicket apoya? porque javascript se supone que es del lado del cliente. –

3

Esta es la función de diseño de wicket. Puede usar la clase para vincular estilos y componentes.

<form wicket:id="form" id="form> 

También se puede probar (Nunca lo hice) setMarkupId. No estoy seguro de que sea bueno.

+0

setMarkupId no funcionó. –

+1

setMarkupId es la forma de hacerlo, ver mi respuesta a continuación –

+0

oh, lo siento. Lo interpreté mal como setOutputMarkupId (verdadero). Disculpas @leonidv. y gracias @Michal –

18

Hemos establecido los identificadores de marcado a mano extensamente en nuestro proyecto para facilitar las pruebas automáticas con el marco de prueba de Selenium. Definitivamente funciona

Component.setOutputMarkupId(true); // write id attribute of element to html 
Component.setMarkupId("someid"); // id attribute of element is "someid" 
0

Sí, puedes escribir JavaScript personalizado ... solo tienes que implementarlo de acuerdo con la 'Wicket way'. Puede decorar componentes, llamadas Ajax, etc. con JavaScript personalizado, y luego todo funciona bien.

Cuestiones relacionadas