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.
1. Tapestry5 in action
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
Introduzione
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
1
Tapestry5 in action
Javaday Roma - 01/12/2007
2. Indice
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
Presentazione
●
Concetti chiave
●
Configurazione
●
Component Classes
●
Component Templates
●
Gestire gli eventi
●
Gestire la navigazione
●
Componenti predefiniti
●
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
2
Tapestry5 in action
Javaday Roma - 01/12/2007
3. Presentazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
Cos' è?
●
Web framework creato da Haward L. Ship, orientato
–
ai componenti, fortemente scalabile grazie anche
alla gestione delle istanze tramite il pooling
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
3
Tapestry5 in action
Javaday Roma - 01/12/2007
4. Presentazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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
–
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
4
Tapestry5 in action
Javaday Roma - 01/12/2007
5. Presentazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
Moduli tapestry
●
tapestry-core
–
tapestry-ioc
–
tapestry-annotations
–
tapestry-upload
–
tapestry-hibernate
–
tapestry-spring
–
tapestry-test
–
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
5
Tapestry5 in action
Javaday Roma - 01/12/2007
6. Concetti chiave
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
IOC
●
Tutto è componente
●
Runtime bytecode manipulation
●
Template html per la view
●
Persistenza delle variabili di classe
●
Injection dei servizi
●
Asset
●
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
6
Tapestry5 in action
Javaday Roma - 01/12/2007
7. Configurazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
Editare il web.xml
●
Includere le dipendenze nel classpath
●
I vincoli di struttura
●
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
7
Tapestry5 in action
Javaday Roma - 01/12/2007
8. Configurazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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>
[...]
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
8
Tapestry5 in action
Javaday Roma - 01/12/2007
9. Configurazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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>
[...]
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
9
Tapestry5 in action
Javaday Roma - 01/12/2007
10. Configurazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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>
[...]
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
10
Tapestry5 in action
Javaday Roma - 01/12/2007
11. Configurazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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>
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
11
Tapestry5 in action
Javaday Roma - 01/12/2007
12. Configurazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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)
●
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
12
Tapestry5 in action
Javaday Roma - 01/12/2007
13. Configurazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
13
Tapestry5 in action
Javaday Roma - 01/12/2007
14. Component classes
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
14
Tapestry5 in action
Javaday Roma - 01/12/2007
15. Component classes
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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
●
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
15
Tapestry5 in action
Javaday Roma - 01/12/2007
16. Component classes
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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.
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
16
Tapestry5 in action
Javaday Roma - 01/12/2007
17. Component templates
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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)
–
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
17
Tapestry5 in action
Javaday Roma - 01/12/2007
18. Component templates
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
18
Tapestry5 in action
Javaday Roma - 01/12/2007
19. Component templates
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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})
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
19
Tapestry5 in action
Javaday Roma - 01/12/2007
20. Gestire gli eventi
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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)
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
20
Tapestry5 in action
Javaday Roma - 01/12/2007
21. Gestire gli eventi
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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[]
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
21
Tapestry5 in action
Javaday Roma - 01/12/2007
22. Gestire gli eventi
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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.
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
22
Tapestry5 in action
Javaday Roma - 01/12/2007
23. Gestire la navigazione
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
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)
–
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
23
Tapestry5 in action
Javaday Roma - 01/12/2007
24. Componenti predefiniti
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
I principali componenti forniti da Tapestry sono:
Control (If, Loop)
●
Link (ActionLink, PageLink)
●
Form (Form, TextField, DateField,
●
PasswordField, Select)
Complessi (BeanDisplay, BeanEditForm, Grid)
●
Marco Pugliese - bobpuley@gmail.com – Java Italian Portal
24
Tapestry5 in action
Javaday Roma - 01/12/2007