Post on 16-Apr-2017
Tapestry5 in actionIntroduzione
Indice
Presentazione
Concetti chiave
Configurazione
Component Classes
Component Templates
Gestire gli eventi
Gestire la navigazione
Componenti predefiniti
Presentazione
Cos' ?
Web framework creato da Haward L. Ship, orientato ai componenti, fortemente scalabile grazie anche alla gestione delle istanze tramite il pooling
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
Presentazione
Moduli tapestry
tapestry-core
tapestry-ioc
tapestry-annotations
tapestry-upload
tapestry-hibernate
tapestry-spring
tapestry-test
Concetti chiave
IOC
Tutto componente
Runtime bytecode manipulation
Template html per la view
Persistenza delle variabili di classe
Injection dei servizi
Asset
Configurazione
Editare il web.xml
Includere le dipendenze nel classpath
I vincoli di struttura
Configurazione
editare il web.xml
[...]
tapestry.app-packagejavaday.jukebox.web
jukeorg.apache.tapestry.TapestryFilter
juke/*
[...]
Configurazione
editare il web.xml
[...]
tapestry.app-packagejavaday.jukebox.web
jukeorg.apache.tapestry.TapestryFilter
juke/*
[...]
Configurazione
editare il web.xml
[...]
tapestry.app-packagejavaday.jukebox.web
jukeorg.apache.tapestry.TapestryFilter
juke/*
[...]
Configurazione
includere le dipendenze
org.apache.tapestrytapestry-core5.0.6org.apache.tapestrytapestry-ioc5.0.6org.apache.tapestrytapestry-annotations5.0.6
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)
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
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
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
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.
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)
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
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})
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)
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[]
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.
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)
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)
Cliccate per modificare il formato del testo della struttura
Secondo livello struttura
Terzo livello struttura
Quarto livello struttura
Quinto livello struttura
Sesto livello struttura
Settimo livello struttura
Ottavo livello struttura
Nono livello struttura
Marco Pugliese - bobpuley@gmail.com Java Italian PortalJavaday Roma - 01/12/2007
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License