24
Marco Pugliese - [email protected] – Java Italian Portal Javaday Roma - 01/12/2007 Tapestry5 in action 1 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Tapestry5 in action Introduzione

Tapestry 5 in Action Introduzione

Embed Size (px)

DESCRIPTION

Jakarta Tapestry è un framework basato su un modello a componenti che si distacca dall’approccio imperante del MVC. Durante il talk sarà sviluppata una semplice web application, un Joke box online, che permetterà di apprendere i concetti e le features di Tapestry 5.

Citation preview

Page 1: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 1

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Tapestry5 in action

Introduzione

Page 2: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 2

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Indice

● Presentazione● Concetti chiave● Configurazione● Component Classes ● Component Templates● Gestire gli eventi● Gestire la navigazione● Componenti predefiniti

Page 3: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 3

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Presentazione

● Cos' è?– Web framework creato da Haward L. Ship, orientato

ai componenti, fortemente scalabile grazie anche alla gestione delle istanze tramite il pooling

Page 4: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 4

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Presentazione

● Goals– Non occorre estendere o implementare alcuna

classe– Gestione trasparente dello stato dei componenti– Rapidità di sviluppo– Semplicità di utilizzo dei componenti– Live reloading in fase di sviluppo

Page 5: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 5

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Presentazione

● Moduli tapestry– tapestry-core– tapestry-ioc– tapestry-annotations– tapestry-upload– tapestry-hibernate– tapestry-spring– tapestry-test

Page 6: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 6

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Concetti chiave

● IOC● Tutto è componente● Runtime bytecode manipulation● Template html per la view● Persistenza delle variabili di classe● Injection dei servizi● Asset

Page 7: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 7

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Configurazione

● Editare il web.xml● Includere le dipendenze nel classpath● I vincoli di struttura

Page 8: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 8

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Configurazione

editare il web.xml

[...]<context-param>

<param-name>tapestry.app-package</param-name><param-value>javaday.jukebox.web</param-value>

</context-param><filter>

<filter-name>juke</filter-name><filter-class>

org.apache.tapestry.TapestryFilter</filter-class>

</filter><filter-mapping>

<filter-name>juke</filter-name><url-pattern>/*</url-pattern>

</filter-mapping>[...]

Page 9: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 9

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Configurazione

editare il web.xml

[...]<context-param>

<param-name>tapestry.app-package</param-name><param-value>javaday.jukebox.web</param-value>

</context-param><filter>

<filter-name>juke</filter-name><filter-class>

org.apache.tapestry.TapestryFilter</filter-class>

</filter><filter-mapping>

<filter-name>juke</filter-name><url-pattern>/*</url-pattern>

</filter-mapping>[...]

Page 10: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 10

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Configurazione

editare il web.xml

[...]<context-param>

<param-name>tapestry.app-package</param-name><param-value>javaday.jukebox.web</param-value>

</context-param><filter>

<filter-name>juke</filter-name><filter-class>

org.apache.tapestry.TapestryFilter</filter-class>

</filter><filter-mapping>

<filter-name>juke</filter-name><url-pattern>/*</url-pattern>

</filter-mapping>[...]

Page 11: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 11

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Configurazione

includere le dipendenze

<dependencies><dependency>

<groupId>org.apache.tapestry</groupId><artifactId>tapestry-core</artifactId><version>5.0.6</version>

</dependency><dependency>

<groupId>org.apache.tapestry</groupId><artifactId>tapestry-ioc</artifactId><version>5.0.6</version>

</dependency><dependency>

<groupId>org.apache.tapestry</groupId><artifactId>tapestry-annotations</artifactId><version>5.0.6</version>

</dependency></dependencies>

Page 12: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 12

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Configurazione

i vincoli di struttura

organizzazione delle directories– tapestry.app-package (dichiarato nel web.xml)

● pages (component classes, templates e messages)● components (component classes, templates e messages)● mixins (component classes, templates e messages)● state (classi per la gestione dello stato dell'applicazione)● services (classi per la cofigurazione del container IOC)

Page 13: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 13

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Configurazione

i vincoli di struttura

● organizzazione dei files– Il template e la classe di un componente devono

essere nello stesso package e avere lo stesso nome– Nel caso delle pages il template può trovarsi nella

webroot

Page 14: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 14

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Component classes

Dal punto di vista dello sviluppatore:● Pagine e componenti differiscono solo per il

package a cui appartengono● Una pagina è sostanzialmente il root element di

una gerarchia di componenti

Page 15: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 15

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Component classes

Di base una component class deve:● Essere pubblica● Trovarsi nel package corretto

– root-package/pages – root-package/components – root-package/mixins

● Avere un costruttore pubblico senza argomenti

Page 16: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 16

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Component classes

Una component class può:● Essere posizionata in un qualunque subpackage● Avere delle variabili di istanza

– devono essere private – di default vengono reimpostate ad ogni request– Se annotate come persistenti mantengono il valore

cross-request● Avere dei metodi per la gestione di eventi o del

ciclo di vita del componente stesso.

Page 17: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 17

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Component templates

Un component template deve:● Rispettare le regole di well formed xml● Avere estensione .tml● Trovarsi nel package corretto

– root-package/components– root-package/mixins– root-package/pages– Web app contextRoot (solo per le pages)

Page 18: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 18

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Component templates

Un component template può:● Essere localizzato (SomeComponent_it.tml)● Essere ereditato dalla classe parent● Dichiarare un Doctype (quello sul componente

più esterno sovrascrive gli altri)● Dichiarare il tapestry namespace indispensabile

per poter usare i tapestry components e quelli custom

Page 19: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 19

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Component templates

I principali tapestry elements sono:● body (renderizza il body del componente)● block (incapsula un frammento di template)● parameter (speciale tipo di block)● container (workaround per rispettare il well

formed)● expansions (output render, simile al EL. Es:

${espressione})

Page 20: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 20

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Gestire gli eventi

Gli event handler methods si definiscono:● Attraverso l'annotation OnEvent.

– Es: @OnEvent(component=”formUtente”, value=”success”)

● Rispettando la naming convention– oneventName[FromcomponentId].

● es: void onSuccessFromFormUtente(String user, String pass)

Page 21: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 21

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Gestire gli eventi

I parametri passati agli event handler methods:● Possono essere 0 o più● Vengono automaticamente convertiti al tipo

definito nella signature del metodo (per ogni tipo riconosciuto da tapestry)

● Possono essere intercettati genericamente definendo un unico parametro di tipo Object[]

Page 22: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 22

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Gestire gli eventi

Da notare che:● Nelle urls generate dagli eventi, non è presente

alcuna informazione su cosa debba accadere● I componenti che definiscono degli event

handler methods, hanno la responsabilità di conoscere e implementare il comportamento che deve verificarsi in corrispondenza dell'evento.

Page 23: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 23

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Gestire la navigazione

Gli event handler methods e lifecycle methods possono restituire:– void o null (implica una redirect alla pagina

corrente)– String (nome della pagina da renderizzare)– Class (corrispondente ad una page)– Page (deve essere creata con @InjectPage)– Link (redirect)– Stream (per pdf, download o.... mp3)

Page 24: Tapestry 5 in Action Introduzione

Marco Pugliese - [email protected] – Java Italian PortalJavaday Roma - 01/12/2007 Tapestry5 in action 24

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License

Componenti predefiniti

I principali componenti forniti da Tapestry sono:● Control (If, Loop)● Link (ActionLink, PageLink)● Form (Form, TextField, DateField,

PasswordField, Select)● Complessi (BeanDisplay, BeanEditForm, Grid)