Indice <ul><li>Presentazione </li></ul><ul><li>Concetti chiave </li></ul><ul><li>Configurazione </li></ul><ul><li>Componen...
Presentazione <ul><li>Cos' è? </li></ul><ul><ul><li>Web framework creato da Haward L. Ship, orientato ai componenti, forte...
Presentazione <ul><li>Goals </li></ul><ul><ul><li>Non occorre estendere o implementare alcuna classe </li></ul></ul><ul><u...
Presentazione <ul><li>Moduli tapestry </li></ul><ul><ul><li>tapestry-core </li></ul></ul><ul><ul><li>tapestry-ioc </li></u...
Concetti chiave <ul><li>IOC </li></ul><ul><li>Tutto è componente </li></ul><ul><li>Runtime bytecode manipulation </li></ul...
Configurazione <ul><li>Editare il web.xml </li></ul><ul><li>Includere le dipendenze nel classpath </li></ul><ul><li>I vinc...
Configurazione <ul><li>editare il web.xml </li></ul>
Configurazione <ul><li>editare il web.xml </li></ul>
Configurazione <ul><li>editare il web.xml </li></ul>
Configurazione <ul><li>includere le dipendenze </li></ul>
Configurazione <ul><li>i vincoli di struttura </li></ul><ul><li>organizzazione delle directories </li></ul><ul><ul><li>tap...
Configurazione <ul><li>i vincoli di struttura </li></ul><ul><li>organizzazione dei files </li></ul><ul><ul><li>Il template...
Component classes <ul><li>Dal punto di vista dello sviluppatore: </li></ul><ul><li>Pagine e componenti differiscono solo p...
Component classes <ul><li>Di base una component class deve: </li></ul><ul><li>Essere pubblica </li></ul><ul><li>Trovarsi n...
Component classes <ul><li>Una component class può: </li></ul><ul><li>Essere posizionata in un qualunque subpackage </li></...
Component templates <ul><li>Un component template deve: </li></ul><ul><li>Rispettare le regole di well formed xml </li></u...
Component templates <ul><li>Un component template può: </li></ul><ul><li>Essere localizzato (SomeComponent_it.tml) </li></...
Component templates <ul><li>I principali tapestry elements sono: </li></ul><ul><li>body (renderizza il body del componente...
Gestire gli eventi <ul><li>Gli event handler methods si definiscono: </li></ul><ul><li>Attraverso l'annotation OnEvent.  <...
Gestire gli eventi <ul><li>I parametri passati agli event handler methods: </li></ul><ul><li>Possono essere 0 o più </li><...
Gestire gli eventi <ul><li>Da notare che: </li></ul><ul><li>Nelle urls generate dagli eventi, non è presente alcuna inform...
Gestire la navigazione <ul><li>Gli event handler methods e lifecycle methods possono restituire: </li></ul><ul><ul><li>voi...
Componenti predefiniti <ul><li>I principali componenti forniti da Tapestry sono: </li></ul><ul><li>Control ( If ,  Loop ) ...
Upcoming SlideShare
Loading in …5
×

03 Tapestry5 In Action Introduzione

909 views

Published on

introduzione ai concetti base di tapestry 5

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
909
On SlideShare
0
From Embeds
0
Number of Embeds
22
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

03 Tapestry5 In Action Introduzione

  1. 2. Indice <ul><li>Presentazione </li></ul><ul><li>Concetti chiave </li></ul><ul><li>Configurazione </li></ul><ul><li>Component Classes </li></ul><ul><li>Component Templates </li></ul><ul><li>Gestire gli eventi </li></ul><ul><li>Gestire la navigazione </li></ul><ul><li>Componenti predefiniti </li></ul>
  2. 3. Presentazione <ul><li>Cos' è? </li></ul><ul><ul><li>Web framework creato da Haward L. Ship, orientato ai componenti, fortemente scalabile grazie anche alla gestione delle istanze tramite il pooling </li></ul></ul>
  3. 4. Presentazione <ul><li>Goals </li></ul><ul><ul><li>Non occorre estendere o implementare alcuna classe </li></ul></ul><ul><ul><li>Gestione trasparente dello stato dei componenti </li></ul></ul><ul><ul><li>Rapidità di sviluppo </li></ul></ul><ul><ul><li>Semplicità di utilizzo dei componenti </li></ul></ul><ul><ul><li>Live reloading in fase di sviluppo </li></ul></ul>
  4. 5. Presentazione <ul><li>Moduli tapestry </li></ul><ul><ul><li>tapestry-core </li></ul></ul><ul><ul><li>tapestry-ioc </li></ul></ul><ul><ul><li>tapestry-annotations </li></ul></ul><ul><ul><li>tapestry-upload </li></ul></ul><ul><ul><li>tapestry-hibernate </li></ul></ul><ul><ul><li>tapestry-spring </li></ul></ul><ul><ul><li>tapestry-test </li></ul></ul>
  5. 6. Concetti chiave <ul><li>IOC </li></ul><ul><li>Tutto è componente </li></ul><ul><li>Runtime bytecode manipulation </li></ul><ul><li>Template html per la view </li></ul><ul><li>Persistenza delle variabili di classe </li></ul><ul><li>Injection dei servizi </li></ul><ul><li>Asset </li></ul>
  6. 7. Configurazione <ul><li>Editare il web.xml </li></ul><ul><li>Includere le dipendenze nel classpath </li></ul><ul><li>I vincoli di struttura </li></ul>
  7. 8. Configurazione <ul><li>editare il web.xml </li></ul>
  8. 9. Configurazione <ul><li>editare il web.xml </li></ul>
  9. 10. Configurazione <ul><li>editare il web.xml </li></ul>
  10. 11. Configurazione <ul><li>includere le dipendenze </li></ul>
  11. 12. Configurazione <ul><li>i vincoli di struttura </li></ul><ul><li>organizzazione delle directories </li></ul><ul><ul><li>tapestry.app-package (dichiarato nel web.xml) </li></ul></ul><ul><ul><ul><li>pages (component classes, templates e messages) </li></ul></ul></ul><ul><ul><ul><li>components (component classes, templates e messages) </li></ul></ul></ul><ul><ul><ul><li>mixins (component classes, templates e messages) </li></ul></ul></ul><ul><ul><ul><li>state (classi per la gestione dello stato dell'applicazione) </li></ul></ul></ul><ul><ul><ul><li>services (classi per la cofigurazione del container IOC) </li></ul></ul></ul>
  12. 13. Configurazione <ul><li>i vincoli di struttura </li></ul><ul><li>organizzazione dei files </li></ul><ul><ul><li>Il template e la classe di un componente devono essere nello stesso package e avere lo stesso nome </li></ul></ul><ul><ul><li>Nel caso delle pages il template può trovarsi nella webroot </li></ul></ul>
  13. 14. Component classes <ul><li>Dal punto di vista dello sviluppatore: </li></ul><ul><li>Pagine e componenti differiscono solo per il package a cui appartengono </li></ul><ul><li>Una pagina è sostanzialmente il root element di una gerarchia di componenti </li></ul>
  14. 15. Component classes <ul><li>Di base una component class deve: </li></ul><ul><li>Essere pubblica </li></ul><ul><li>Trovarsi nel package corretto </li></ul><ul><ul><li>root-package /pages </li></ul></ul><ul><ul><li>root-package /components </li></ul></ul><ul><ul><li>root-package /mixins </li></ul></ul><ul><li>Avere un costruttore pubblico senza argomenti </li></ul>
  15. 16. Component classes <ul><li>Una component class può: </li></ul><ul><li>Essere posizionata in un qualunque subpackage </li></ul><ul><li>Avere delle variabili di istanza </li></ul><ul><ul><li>devono essere private </li></ul></ul><ul><ul><li>di default vengono reimpostate ad ogni request </li></ul></ul><ul><ul><li>Se annotate come persistenti mantengono il valore cross-request </li></ul></ul><ul><li>Avere dei metodi per la gestione di eventi o del ciclo di vita del componente stesso. </li></ul>
  16. 17. Component templates <ul><li>Un component template deve: </li></ul><ul><li>Rispettare le regole di well formed xml </li></ul><ul><li>Avere estensione .tml </li></ul><ul><li>Trovarsi nel package corretto </li></ul><ul><ul><li>root-package /components </li></ul></ul><ul><ul><li>root-package /mixins </li></ul></ul><ul><ul><li>root-package /pages </li></ul></ul><ul><ul><li>Web app contextRoot (solo per le pages) </li></ul></ul>
  17. 18. Component templates <ul><li>Un component template può: </li></ul><ul><li>Essere localizzato (SomeComponent_it.tml) </li></ul><ul><li>Essere ereditato dalla classe parent </li></ul><ul><li>Dichiarare un Doctype (quello sul componente più esterno sovrascrive gli altri) </li></ul><ul><li>Dichiarare il tapestry namespace indispensabile per poter usare i tapestry components e quelli custom </li></ul>
  18. 19. Component templates <ul><li>I principali tapestry elements sono: </li></ul><ul><li>body (renderizza il body del componente) </li></ul><ul><li>block (incapsula un frammento di template) </li></ul><ul><li>parameter (speciale tipo di block) </li></ul><ul><li>container (workaround per rispettare il well formed) </li></ul><ul><li>expansions (output render, simile al EL. Es: ${ espressione } ) </li></ul>
  19. 20. Gestire gli eventi <ul><li>Gli event handler methods si definiscono: </li></ul><ul><li>Attraverso l'annotation OnEvent. </li></ul><ul><ul><li>Es: @OnEvent(component=”formUtente”, value=”success”) </li></ul></ul><ul><li>Rispettando la naming convention </li></ul><ul><ul><li>on eventName [From componentId ]. </li></ul></ul><ul><ul><ul><li>es: void onSuccessFromFormUtente(String user, String pass) </li></ul></ul></ul>
  20. 21. Gestire gli eventi <ul><li>I parametri passati agli event handler methods: </li></ul><ul><li>Possono essere 0 o più </li></ul><ul><li>Vengono automaticamente convertiti al tipo definito nella signature del metodo (per ogni tipo riconosciuto da tapestry) </li></ul><ul><li>Possono essere intercettati genericamente definendo un unico parametro di tipo Object[] </li></ul>
  21. 22. Gestire gli eventi <ul><li>Da notare che: </li></ul><ul><li>Nelle urls generate dagli eventi, non è presente alcuna informazione su cosa debba accadere </li></ul><ul><li>I componenti che definiscono degli event handler methods, hanno la responsabilità di conoscere e implementare il comportamento che deve verificarsi in corrispondenza dell'evento. </li></ul>
  22. 23. Gestire la navigazione <ul><li>Gli event handler methods e lifecycle methods possono restituire: </li></ul><ul><ul><li>void o null (implica una redirect alla pagina corrente) </li></ul></ul><ul><ul><li>String (nome della pagina da renderizzare) </li></ul></ul><ul><ul><li>Class (corrispondente ad una page) </li></ul></ul><ul><ul><li>Page (deve essere creata con @InjectPage) </li></ul></ul><ul><ul><li>Link (redirect) </li></ul></ul><ul><ul><li>Stream (per pdf, download o.... mp3) </li></ul></ul>
  23. 24. Componenti predefiniti <ul><li>I principali componenti forniti da Tapestry sono: </li></ul><ul><li>Control ( If , Loop ) </li></ul><ul><li>Link ( ActionLink , PageLink ) </li></ul><ul><li>Form ( Form , TextField , DateField , PasswordField , Select ) </li></ul><ul><li>Complessi ( BeanDisplay , BeanEditForm , Grid ) </li></ul>

×