SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Tapestry 5 in Action Introduzione

  • 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