Actualizando de Tapestry 5.0.15 a versiones más nuevas

Recientemente tuve algunos problemas actualizando una aplicación que utilizaba Tapestry 5.0.15 a 5.0.17 y tuve que buscar bastante para encontrar los problemas porque no están muy bien documentados algunos cambios, así que decidí publicar esta información aquí:

Lo más importante es que los campos de sus clases de páginas que anoten con @Property, no pueden tener un valor por default, ni pueden tener un método getter o setter. Si necesitan implementar uno de los dos métodos, van a tener que implementar ambos y quitar la anotación @Property. Si tienen un valor default, se lo deben asignar en algún otro lugar (un método anotado con @BeforeRender o hacer el getter que verifique si ya tiene algun valor y asignárselo en caso de que no, vigilando que si el valor puede ser fijado a nulo por el usuario, no hay que volver a ponerle nada, etc).

Otra cosa muy importante es que si usan Maven, revisen el directorio WEB-INF/lib de su aplicación (está dentro del target del proyecto) y borren las librerías de la versión anterior de Tapestry, de otra forma se quedan las versiones anteriores y luego su contenedor se puede confundir y cargar las clases que no son; de esto me di cuenta porque todo funcionaba bien menos un elemento nuevo que viene en la versión más nueva.

Todo esto lo hice porque vi que la 5.0.17 ya trae el elemento LinkSubmit, que antes no estaba, y es bastante útil para poner ligas dentro de una forma para realizar alguna acción pero que haga submit a la forma. Aunque la única forma en que pude hacer que funcionara fue poniéndole un evento custom al componente; el evento default es "selected" pero si hacen un método anotado con @OnEvent(component="milinksubmit") o bien que se llame onSelectedFromMiLinkSubmit, no funciona. Solamente cambiando el nombre del evento en el componente (en el template la propiedad t:event="mievento") pude hacer que funcionara, yo acostumbro anotar los métodos con @OnEvent("mievento") en vez de ponerles el nombre convencional, porque creo que así es más descriptivo: el nombre del método me dice la acción que realiza y la anotación me dice quién o cuándo se invoca.

Espero le sea de utilidad esta información a la gente que ya se encuentre desarrollando alguna aplicación con Tapestry 5.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Clases de paginas

Otra diferencia importante son las clases para las paginas; en la versión 5.0.15 se guardaban en un jar con el mismo nombre de la aplicación, por algun problema del class loader; al parecer ya cambió esto y ahora no es necesario ya que se haga el jar (el cual se creaba automáticamente con la configuración de proyecto que genera Tapestry para Maven).

Es algo tal vez irrelevante, excepto si por alguna razón esperaban encontrar el jar del WEB-INF/lib, ya no va a estar. Esto es para proyectos nuevos, porque los que se crearon con la versión 5.0.15 siguen generando el jar aunque se actualicen a la 5.0.17 (a menos que cambien manualmente la configuración de Maven).

La definición en el pom.xml que metía las clases del proyecto en un jar es así:

      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
          <archiveClasses>true</archiveClasses>
        </configuration>
      </plugin>

Given the choice of dancing pigs and security, users will choose dancing pigs, every single time. - Steve Riley

Imagen de iberck

Otro cambio que se dió fué

Otro cambio que se dió fué en el componente grid donde el atributo remove se cambió por exclude

JavaRanch big moose saloon member