Upload
maraexception
View
2.265
Download
1
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
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
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
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
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
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
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
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
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>[...]
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>[...]
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>[...]
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>
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)
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
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
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
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.
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)
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
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})
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)
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[]
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.
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)
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)