Tapestry 5
description
Transcript of Tapestry 5
WEBTOOLS 2009
• Santiago Murgolo• Andrés Vicente• Diego Rojas
AgendaAgenda
• Introducción
• Características
• Páginas
• Componentes
• Integración
• Historia y Configuración
• Ejemplo
• Factores a tener en cuenta
• Links
IntroducciónIntroducción
Tapestry es un framework J2EE de código abierto para eldesarrollo de interfaces de aplicaciones Web Java basadas encomponentes y orientadas a objetos siendo:
Dinámicas Robustas Altamente escalables
se basa en el estándar de la API JavaServlet, por lo que funciona en cualquiercontenedor servlet o servidor de aplicaciones.
CaracterísticasCaracterísticas
• Orientado a componentes:
Una aplicación se compone de un conjunto de páginas Web, cada una de las cuales se construye a partir de componentes que pueden generar diversos eventos ante los que la página puede reaccionar.
Características (cont.)Características (cont.)
•Implementa la arquitectura modelo-vista-controlador(MVC)
•Sigue el enfoque POJO:• convenciones de nombres• Anotaciones
• Soporte para validación de datos de entrada
• Soporte para inyección de dependencias
•Soporte para inversión de control (IoC) Inyecciones solo por constructor
•Integración con otras tecnologías
Características (cont.)Características (cont.)
El framework maneja:
• Procesamiento de demandas (analisis, envio)
• Creación de URL
• Control del estado de la página (persistencia de los datos)
• Validación de los datos ingresados por el usuario
• Internacionalización de la información
• Control de errores y generador de reportes de excepciones
Paginas en TapestryPaginas en Tapestry
Cada Pagina o componente es representada por:
Clase Java Plantilla opcional (XML)
• Ambas deben tener el mismo nombre
• El objetivo de la clase Java es recibir los eventos relativos a la página y el objetivo de la plantilla es generar la vista de la página
Paginas:Paginas: PlantillasPlantillas
Las plantillas de los componentes son:
•documentos gramaticalmente correctos en XML
•no hay JSP
•la mayoría son archivos XHTML
•Tiene extension “.tml”
•El XML incluirá referencias a componentes y también puede incluir expansiones
Páginas: Páginas: Ciclo de vidaCiclo de vida
Para obtener eficiencia Tapestry mantiene un pool de instancias para cada página
•Cuando una página es requerida, obtiene una instancia del pool para atender esa petición • Una vez atendida la petición la página es devuelta al pool • Antes de devolverla al pool las variables de la instancia son inicializadas para borrar los datos específicos de esa petición
cada vez que se trabaja con una página puede ser una instancia distinta
Paginas: Paginas: FiltrosFiltros
Proporcionan un mecanismo estándar para interceptar peticiones y respuestas dentro de un contenedor de Servlets, permitiendo utilizar la información contenida, además:
• Capturan una petición y cambiar su flujo• Realizan transformaciones sobre las respuestas generadas
Se definen con la etiqueta filter:• filter-name• filter-class
La etiqueta filter-mapping indica cuando debe invocarse un Filtro:
• filter-name• url-pattern
Integracion en un contenedor de Integracion en un contenedor de servletsservlets
Se integra como un filtro de pedidos En el fichero web.xml debe declararse la clase del filtro
org.apache.tapestry.TapestryFilter
• Puede dársele cualquier nombre
• Procesa todas las peticiones relativas a Tapestry y pasa el resto de peticiones al contenedor de Servlets
•La primer pagina que maneja una petición es Index
web.xmlweb.xml
Integración: Integración: Tapestry + Spring Tapestry + Spring
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>1.2.8</version></dependency>
<filter> <filter-name>app</filter-name> <!-- Special filter that adds in a T5 IoC module derived from the Spring WebApplicationContext. --> <filter-class>org.apache.tapestry5.spring.TapestrySpringFilter</filter-class> </filter>
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
• La integración permite a los beans definidos en Spring ser inyectados en los servicios de IoC deTapestry, como así también en los componentes
pom.xml
web.xml
ComponentesComponentes• Son clases concretas ya que no extienden de ninguna clase base ni implementan interfaces•No necesitan configuración via archivos XML• Facil empaquetamiento y reutilización en otras aplicaciones•Con la notación “ @component ” se puede embeber un componente con características especiales dentro de otro
import org.example.app.components.Count;
public class Countdown
{
@Component(parameters = { "start=5", "end=1", "value=countValue" })
private Count count;
@Property
private int countValue;
}
Componentes: Componentes: GridGrid
<t:grid t:source="allCelebrities" rowsPerPage="5"/>
public List<Celebrity> getAllCelebrities(){return dataSource.getAllCelebrities();
}
Page.tml
Page.java
Componentes: Componentes: Clases JAVAClases JAVA
Características de las clases java : POJO (Plain Old Java Object)No hay una configuración XML involucrada Solo basta con ponerlas en el paquete adecuado El estado de la página se almacena con propiedades de
objetos Manejadores de eventos sobre componentes Se utilizan convenciones de nombrado o anotaciones
para asociar métodos a eventos generados por
componentes
Componentes: Componentes: Clases JAVA Clases JAVA ejemploejemplo
Componentes:Componentes: Manejo de Manejo de eventoseventos
Se usan para dos propósitos: Representan pedidos originados por el usuario Representan el flujo de control dentro de una solicitud
Metodos para manejo de eventos:
Convención de Nombres OnEventFromComponent
Anotación “ @OnEvent ”
@OnEvent(value = "action", component = "select")
void valueChosen(int value)
{
this.value = value;
}
void onActionFromSelect(int value)
{
this.value = value;
}
Componentes:Componentes: Validación de Validación de datosdatos
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <head> <title>Login</title> </head> <body> <h1>Please Login</h1>
<form t:id="form"> <t:errors/> <t:label for="userName"/>: <input t:type="TextField" t:id="userName" t:validate="required,minlength=3" size="30"/> <br/> <t:label for="password"/>: <input t:type="PasswordField" t:id="password" t:validate="required,minlength=3" size="30"/> <br/> <input type="submit" value="Login"/> </form>
</body></html>
• Validación declarativa: solo se debe informar a Tapestry que validación se aplicará sobre un determinado campo de un Form y éste se encarga de implementarla
Tapestry 4 Tapestry 4 Tapestry 5 Tapestry 5
• Desarrollo desde cero
• No hay compatibilidad con versiones anteriores
• T4: dificil T5: facil
• T4: facil T5: Automatico
Entorno de DesarrolloEntorno de Desarrollo
• Eclipse, NetBeans, IDEA
• Maven
• Jetty (Jetty Laucher)
Ejemplo: Clases JAVA y Ejemplo: Clases JAVA y PlantillaPlantilla
Guess.java
Guess.tml
Estructura de la aplicaciónEstructura de la aplicación
EjecuciónEjecución
Despliegue de la aplicación en el servidor Jetty
Aplicación corriendo en el localHost
Variedad de FrameworksVariedad de Frameworks
UsuariosUsuarios
Factores a tener en cuentaFactores a tener en cuenta
• El tipo de aplicación a construir.
• Nivel de complejidad de la aplicación.
• Comunidad desarrolladora de la herramienta.
• Soporte y Mantenimiento.
• Futuro de la tecnología a emplear.
• Detalles técnicos de cada herramienta.
LinksLinks
• Sitio Oficial: http://tapestry.apache.org/tapestry5/
• Blog del Autor: http://tapestryjava.blogspot.com/
• Wiki HowTos: http://wiki.apache.org/tapestry/Tapestry5HowTos
• Demos y Ejemplos:
http://jumpstart.doublenegative.com.au:8080/jumpstart/
PREGUNTASPREGUNTAS