Tapestry es un Framework orientado a componentes para la creación de aplicaciones web altamente escalables. Entre sus características destacan:
Al momento de escribir este articulo la última versión estable liberada hace unos días es la 5.4.0
Tapestry tiene una rápida forma de crear un proyecto a partir de una estructura predeterminada mediante un arquetipo de Maven, además que nos viene con un pequeño ejemplo para verlo en acción de inmediato. Si usas Gradle como yo, no importa, al crear el arquetipo también nos generá un archivo build.gradle.
Lo único que tenemos que hacer es tener Maven y abrir nuestra consola en el directorio donde deseamos crear el proyecto y ejecutar la siguiente línea:
mvn archetype:generate -DarchetypeCatalog=http://tapestry.apache.org
Al ejecutar el comando anterior, en la consola tendremos una salida con la lista de posibles arquetipos. Buscaremos el que diga Tapestry QuickStart. La salida que yo tengo es la siguiente:
Choose archetype:
1: http://tapestry.apache.org -> org.apache.tapestry:quickstart (Tapestry 5 Quickstart Project)
2: http://tapestry.apache.org -> org.apache.tapestry:tapestry-archetype (Tapestry 4.1.6 Archetype)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : ___aqui teclear el 1____
Al momento de escribir este tutorial es la opción 1 la que nos permitirá crear un proyecto con la versión 5 de Tapestry.
Después nos preguntará que versión en específico de tapestry que queremos usar para crear el proyecto, en mi caso elegí la última versión al momento de escribir este tutorial que es la versión 5.4.0
Choose org.apache.tapestry:quickstart version:
1: 5.0.19
2: 5.1.0.5
3: 5.2.6
4: 5.3.7
5: 5.4.0
Choose a number: 5: ___TECLEAR 5____
Este QuickStart se encuentra descrito en el siguiente link que te recomiendo leer en caso que tengas algún problema hasta el momento.
Después de elegir la versión te preguntará por el groupId y artifactId.
Listo!!! Si nunca has usado Maven seguramente lo anterior te parece mucho rollo y bueno, te recomiendo dedicarle unos 15 minutos a leer algún tutorial de Maven, en cuanto lo termines, regresa aquí, no te desanimes!!
Si ya usas Maven o Gradle, en hora buena!! Ahora importa el proyecto MAVEN desde tu IDE favorito, que en mi caso es IntelliJ IDEA.
De nueva cuenta Listo!!! Toda vez que importaste el proyecto y se descargaron las dependencias, para correr el proyecto simplemente ejecuta la tarea jetty:run
y tendrás un proyecto de ejemplo ya funcionando…
Hasta aquí, realizar todo lo anterior no lleva más de 3 minutos!! En solo 3 minutos ya tenemos un proyecto de ejemplo corriendo, basta abrir nuestro navegador.
La estructura de carpetas de nuestro proyecto luce algo así:
Vamos a crear un sencillo formulario que me permita agregar nuevos clientes, así que primero creamos nuestro POJO
package mx.com.coffeedev.tapestry.entities;
import mx.com.coffeedev.tapestry.data.Genero;
public class Cliente {
private String nombre;
private String apellidoPaterno;
private String apellidoMaterno;
private Genero sexo;
}
//Crear también los getters y setters con ayuda del IDE
Como observamos en el código anterior, tenemos una referencia a una clase llamada Genero, la cuál es un Enum, así que la creamos.
package mx.com.coffeedev.tapestry.data;
public enum Genero {
MASCULINO, FEMENINO
}
Ahora en la clase Index que se encuentra en el paquete “pages” vamos a agregar un nuevo atributo de clase,
@Property
private Cliente cliente;
La anotación @Property le indica a Tapestry que se trata de una propiedad por lo tanto en tiempo de ejecución Tapestry creará los setters/getters para el atributo cliente.
Finalmente en el archivo Index.tml (se encuentra en el paquete “pages” pero de la carpeta resources) vamos a agregar la siguiente linea al final de todo (pero antes de la etiqueta </html> obviamente)
<t:beaneditform object="cliente"/>
Les comenté que Tapestry tiene Live Class Reloading por lo que si estás usando Eclipse como IDE y tienes habilitado el compilado automático, sin necesidad de reiniciar la aplicación, ve al navegador y refresca la página, al final podrás ver que se nos ha creado un formulario mágicamente!!
Pero Tapestry tiene muchisimas cosas más que hacen el desarrollo ágil, como por ejemplo sus validadores! Basta con ir a nuestra clase Cliente.java y agregar la siguiente anotación al atributo nombre.
@Validate("required")
private String nombre;
En este punto si necesitamos reiniciar nuestro servidor Jetty debido a que el Live Class Realoading solo aplica a componentes y páginas, no así a beans o clases de servicio, pero el reinicio es rapidísimo. Ahora al querer envíar nuestro formulario obtendremos un error
Y bueno, como podemos ver con Tapestry podemos crear atractivas interfaces de usuario mágicamente, ideal para prototipos ó formularios productivos, de cualquier forma si no queremos usar el componente beaneditform
podemos crear los formularios manualmente.
En próximos tutoriales hablaré más acerca de este buen Framework.