Plugin Tapestry
Total Page:16
File Type:pdf, Size:1020Kb
PlugIn Tapestry Autor @picodotdev https://picodotdev.github.io/blog-bitix/ 2019 1.4.2 5.4 A tod@s l@s programador@s que en su trabajo no pueden usar el framework, librería o lenguaje que quisieran. Y a las que se divierten programando y aprendiendo hasta altas horas de la madrugada. Non gogoa, han zangoa Hecho con un esfuerzo en tiempo considerable con una buena cantidad de software libre y más ilusión en una región llamada Euskadi. PlugIn Tapestry: Desarrollo de aplicaciones y páginas web con Apache Tapestry @picodotdev 2014 - 2019 2 Prefacio Empecé El blog de pico.dev y unos años más tarde Blog Bitix con el objetivo de poder aprender y compartir el conocimiento de muchas cosas que me interesaban desde la programación y el software libre hasta análisis de los productos tecnológicos que caen en mis manos. Las del ámbito de la programación creo que usándolas pueden resolver en muchos casos los problemas típicos de las aplicaciones web y que encuentro en el día a día en mi trabajo como desarrollador. Sin embargo, por distintas circunstancias ya sean propias del cliente, la empresa o las personas es habitual que solo me sirvan meramente como satisfacción de adquirir conocimientos. Hasta el día de hoy una de ellas es el tema del que trata este libro, Apache Tapestry. Para escribir en el blog solo dependo de mí y de ninguna otra circunstancia salvo mi tiempo personal, es com- pletamente mío con lo que puedo hacer lo que quiera con él y no tengo ninguna limitación para escribir y usar cualquier herramienta, aunque en un principio solo sea para hacer un ejemplo muy sencillo, en el momento que llegue la oportunidad quizá me sirva para aplicarlo a un proyecto real. Pasados ya unos pocos años desde que empecé el blog allá por el 2010 he escrito varios artículos tratando en cada una de ellos diferentes temas relacionados con Apache Tapestry y que toda aplicación web debe realizar independientemente del lenguaje o framework que se use. Con el blog me divierto mucho pero no se si es la forma más efectiva para difundir todas las bondades que ya conozco de este framework y que a medida voy conociéndolo más sigo descubriendo. Ya llevaba pensándolo bastante tiempo y ha llegado un punto en que juntando todos los artículos que he escrito en el blog completándolas con alguna cosa más podría formar un libro y el resultado es lo que tienes en la pantalla del dispositivo que uses para leerlo. ¿Es realmente necesario que escribiese este libro? Pues sí y no. No, porque ya hay otros muy buenos libros sobre Tapestry algunos escritos por los commiters del framework, como Tapestry 5 - Rapid web application deve- lopment in Java, quizá mejor y de forma más completa que lo explicado en este y que alguien con interés podría adquirir sin ningún problema. Y sí, porque escribiendo uno en español hay más posibilidades de hacérselo llegar a mi entorno más o menos cercano. Mi objetivo con este libro es difundir la palabra para que otra gente disfrute con este framework tanto como lo hago yo cuando programo con él y finalmente aumentar aunque sea un poco las posibilidades de que pueda dedicar mi jornada laboral completa usándolo (guiño, guiño). Tapestry no tiene el «hype» de otros frameworks, ni lleva la etiqueta ágil (aunque podría) que parece que ahora si no se le pone a algo no «mola» y no merece consideración pero tiene muchas características desde casi sus inicios en que fue publicado en el 2002 con la versión 2 que ya desearían para sí muchos otros aún en la actualidad. Como habrás notado este libro no te ha costado ni un céntimo, ¿por qué lo distribuyo al precio de 0,00€ im- puestos incluidos? La razón es simple, porque quiero. Si cobrase algo por él probablemente la audiencia que 3 tuviese no sería muy amplia y de todos modos no saldría de pobre, siendo gratis espero que unos cuantos desa- rrolladores al menos lo vean por encima simplemente por cultura general y lo comparen con lo que usen para programar ahora, ya sea Struts, Grails, Play!, Django, Symfony, Silex, Ruby on Rails, .NET MVC u otros simila- res. Si de entre esos que lo leen hay unos cuantos que se animan a probarlo ya me sentiría satisfecho, si además alguno lo usase para un proyecto real con éxito me haría muy feliz. Gran parte de este libro está basado en lo que he aprendido desde el 2004 mediante su documentación oficial y usándolo principalmente de forma autodidacta. No constituye una guía completa y exhaustiva, ni lo preten- de, simplemente es un manual suficientemente amplio para transmitir al lector los conceptos más importantes y que una vez aprendidos sea capaz de aprender el resto profundizando por sí mismo si consigo despertar su curiosidad. La documentación oficial del proyecto es amplia, buena, completa y suficiente para aprender desde cero (algunas buenas partes de este libro son poco más que una traducción) pero además de la documenta- ción puramente técnica quiero aportar la experiencia y algunas buenas prácticas que he obtenido como usuario durante estos años y desde mi comienzo como programador no solo de este framework. Lo que viene a continuación En los siguientes capítulos encontrarás una explicación detallada de las características del framework y la for- ma de resolver una gran parte de los aspectos con los que tienen que tratar las aplicaciones o páginas web: el entorno de desarrollo, generar el html con plantillas, la lógica de presentación, la internacionalización y loca- lización, la persistencia de la capa de presentación y persistencia en la base de datos, el contenedor de inver- sión de control, la seguridad, peticiones ajax y datos en json, enviar formularios, recibir archivos y devolverlos, como crear layouts para dar un aspecto común a las páginas sin duplicar código, reutilización de código con componentes y con librerías de componentes, pruebas unitarias, de integración y funcionales, assets (estilos, imágenes, javascript) y algunas cosas más adicionales en las que no entraré en muchos detalles pero que daré las indicaciones de como realizarlas como el envió de correos, generación de informes, gráficas, una API REST y analizadores estáticos de código que pueden ser necesarios en algunos casos. Teniendo experiencia y habiendo trabajado en proyectos reales con JSP/Servlets, Struts, JSF, Grails y Apache Tapestry me quedo con una diferencia significativa con la última opción como puedes suponer si he dedicado una gran cantidad de tiempo personal a escribir este libro y el que dedico en mi blog. Trataré de exponer en las siguientes páginas muchos de los motivos que Tapestry me da para ello y que quizá tú también consideres. ¡Empieza la diversión! ¿estás preparad@? 4 Indice 1 Introducción 13 1.1 Principios ................................................. 13 1.2 Características .............................................. 18 1.3 Un poco de historia ........................................... 23 1.4 Opciones alternativas .......................................... 24 1.5 Arquitectura de aplicaciones web .................................... 26 1.6 Casos de éxito y de referencia ...................................... 32 2 Inicio rápido 33 2.1 Instalación JDK .............................................. 33 2.2 Inicio rápido ............................................... 33 2.3 Entorno de desarrollo .......................................... 37 2.4 Integración con el servidor de aplicaciones .............................. 38 2.4.1 Spring Boot ............................................ 38 2.4.2 Spring Boot generando un jar .................................. 47 2.4.3 Spring Boot generando un war ................................. 47 2.4.4 Servidor de aplicaciones externo ................................ 49 2.5 Debugging ................................................ 50 2.6 Código fuente de los ejemplos ..................................... 52 5 INDICE INDICE 3 Páginas y componentes 53 3.1 Clase del componente .......................................... 54 3.2 Plantillas ................................................. 60 3.2.1 Content Type y markup ..................................... 70 3.3 Parámetros del los componentes .................................... 70 3.3.1 Bindings de parámetros ..................................... 72 3.4 La anotación @Parameter ........................................ 75 3.4.1 Parámetros requeridos ..................................... 75 3.4.2 Parámetros opcionales ..................................... 76 3.4.3 Parámetros informales ..................................... 77 3.4.4 Conversiones de tipo en parámetros .............................. 79 3.5 La anotación @Cached ......................................... 80 3.6 Conversiones de tipos .......................................... 82 3.7 Renderizado de los componentes .................................... 83 3.7.1 Fases de renderizado ...................................... 83 3.7.2 Conflictos y ordenes de métodos ................................ 89 3.8 Navegación entre páginas ........................................ 90 3.9 Peticiones de eventos de componente y respuestas ......................... 91 3.10 Peticiones de renderizado de página .................................. 94 3.11 Patrones de navegación de páginas .................................. 95 3.12 Eventos de componente ......................................... 99 3.12.1 Métodos manejadores de evento ................................ 99 3.13 Componentes disponibles ........................................ 104 3.14 Página Dashboard ............................................ 106 3.15 Productividad y errores de compilación