04 Tapestry5 In Action Pratica

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    04 Tapestry5 In Action Pratica - Presentation Transcript

    1.  
    2. Indice
      • Preparare l'ambiente
      • Creiamo la nostra prima page
      • Creiamo un componente per gestire il layout
      • Creiamo un componente per il login/logout
      • La pagina di iscrizione utente
      • L'upload di un file
      • Realizziamo il jukebox
    3.  
    4. Preparare l'ambiente
      • Software utilizzato:
        • JDK 1.6 (mustang)
        • Servlet specification 2.4
        • Maven2
        • Eclipse 3.2
          • Maven2 plugin
          • Jetty launcher 1.4.1
        • Jetty 4.2.27
        • Mysql Server 5.0
    5. Preparare l'ambiente
      • Prima di cominciare installiamo nel repository (locale) di maven tre jar previa scaricati:
        • jukemodel-1.0.0.jar (allegato alla presentazione)
        • jid3lib-0.5.4.jar, JLayer(mp3 util, reperibili qui e qui )
        • jta-1.0.1B.jar (java transaction api, reperibile qui )
    6. Preparare l'ambiente
      • Ok, apriamo eclipse creiamo il nostro maven2 project “jukeweb”
        • File -> new -> project
          • Maven2 -> Maven2 project
    7. Preparare l'ambiente
      • Create project:
    8. Preparare l'ambiente
      • Configure project:
    9. Preparare l'ambiente
      • Creato il progetto aggiungiamo le dipendenze:
      < dependencies > < dependency > < groupId > jukemodel </ groupId > < artifactId > jukemodel </ artifactId > < version > 1.0.0 </ version > </ dependency > < dependency > < groupId > org.apache.tapestry </ groupId > < artifactId > tapestry-spring </ artifactId > < version > 5.0.6 </ version > </ dependency > < dependency > < groupId > org.springframework </ groupId > < artifactId > spring-web </ artifactId > < version > 2.0.2 </ version > </ dependency > < dependencies >
    10. Preparare l'ambiente
      • Ora dovremmo avere tutte le librerie necessarie.
      • Non ci resta che creare e configurare il web.xml
    11.  
    12. Creiamo la nostra prima page
      • Start.java:
    13. Creiamo la nostra prima page
      • Start.tml:
    14. Creiamo la nostra prima page
      • Start.tml:
    15. Creiamo la nostra prima page
      • La sintassi ${[ prefix :] expression [. nestedExpr ] } è detta Expansions.
      • In un' expansions:
        • L'espressione passata viene interpretata secondo le regole di binding
        • La regola da usare viene selezionata con un prefisso
          • prop (default)
          • literal
          • message
    16. Creiamo la nostra prima page
      • Bene, è giunto il momento di lanciare per la prima volta l'applicazione:
    17. Creiamo la nostra prima page
      • Configuriamo jetty:
    18. Creiamo la nostra prima page
      • Configuriamo e lanciamo jetty:
    19. Creiamo la nostra prima page
      • Infine digitiamo l'url sul browser:
        • http://localhost:8080/jukeweb/
    20.  
    21. Creiamo un componente..
      • Prima di proseguire occorre includere nel progetto (in src/main/webapp/) alcune risorse disponibili come allegati alla presentazione:
        • Stylesheets
        • Immagini
        • Un flash mp3 player
      • E in src/main/resources/
        • Javascript files
    22. Creiamo un componente..
      • Come già detto le component classes e i component templates si devono trovare in qualunque sub-package di
        • tapestry.app-package /components
      • Creiamo quindi un componente che ci consenta di “centralizzare” la gestione del layout delle pagine
    23. Creiamo un componente..
      • Border.java (versione 1)
    24. Creiamo un componente..
      • Border.tml (versione 1)
    25. Creiamo un componente..
      • Border.tml (versione 1)
    26. Creiamo un componente..
      • Border.tml (versione 1)
    27. Creiamo un componente..
      • Adeguiamo quindi il template Start.tml
    28. Creiamo un componente..
      • http://localhost:8080/jukeweb/
    29. Creiamo un componente..
      • Ok, ora dovremmo avere acquisito un po' di confidenza col codice, ma il tutto è ancora statico
      • Prima di tutto vediamo come fare a passare al Border i titoli per la finestra e per la pagina.
    30. Creiamo un componente..
      • Un parametro di un componente altro non è che un'attributo d'istanza opportunamente annotato (@Parameter) e corredato dei metodi accessor.
    31. Creiamo un componente..
      • Border.java (versione 2)
    32. Creiamo un componente..
      • Border.java (versione 2)
    33. Creiamo un componente..
      • Border.java (versione 2)
    34. Creiamo un componente..
      • Adeguiamo quindi il template Start.tml
    35. Creiamo un componente..
      • http://localhost:8080/jukeweb/
    36. Creiamo un componente..
      • Gli Assets
        • sono il meccanismo offerto da Tapestry per riferirsi a risorse statiche
        • Consentono di accedere a risorse presenti nel classpath (default) o nel context root della web application
    37. Creiamo un componente..
      • Creiamo quindi ora in Border.java i riferimenti agli stylesheets, ai files javascript e al mp3 flash player
      • Per farlo dobbiamo
        • Dichiarare per ciascuna risorsa che vogliamo linkare una variabile d'istanza di tipo org.apache.tapestry.Asset e il corrispondente metodo getter (il setter non occorre in quanto la risorsa è in sola lettura)
    38. Creiamo un componente..
      • (continua)
        • Annotare ciascuna delle variabili con org.apache.tapestry.ioc.annotations.Inject
        • Annotare ciascuna delle variabili con org.apache.tapestry.annotations.Path (@Path(“context|classpath: path/risorsa.ext ”))
    39. Creiamo un componente..
      • Aggiungiamo a Border.java
    40. Creiamo un componente..
      • (...continua)
    41. Creiamo un componente..
      • Aggiungiamo i metodi getter e modifichiamo il template
    42. Creiamo un componente..
      • Dopo aver salvato ed eseguito diamo uno sguardo al codice risultante
    43. Creiamo un componente..
      • Creiamo un componente per il menù. Menu.java
    44. Creiamo un componente..
      • Creiamo un componente per il menù. Menu.java
    45. Creiamo un componente..
      • E il template Menu.tml
    46. Creiamo un componente..
      • E il template Menu.tml
    47.  
    48. Il componente login
      • Passiamo ora a creare un componente che gestisca le operazioni di login/logout
      • Al componente spettano la responsabilità di:
        • esporre le operazioni opportune
        • Conoscere e gestire il comportamento dell'applicazione al momento del login/logout
    49. Il componente login
      • Login.java
    50. Il componente login
      • Login.java
    51. Il componente login
      • Login.java
    52. Il componente login
      • (... continua)
    53. Il componente login
      • (... continua)
    54. Il componente login
      • (... continua)
    55. Il componente login
      • (... continua)
    56. Il componente login
      • Login.tml
    57. Il componente login
      • Login.tml
    58. Il componente login
      • Login.tml
    59. Il componente login
      • Login.tml
    60. Il componente login
      • (..continua)
    61. Il componente login
      • (..continua)
    62. Il componente login
      • (..continua)
    63. Il componente login
      • E' giunto il momento di integrare spring e il backend per comunicare con il database
      • Primo, modificare il filter nel web.xml
    64. Il componente login
      • Secondo, aggiungere al web.xml:
        • Il listener di spring che si vuole usare
        • Il context-param che punta ai files di configurazione
    65. Il componente login
      • Importiamo nel path opportuno i due files di configurazione di spring
      • Modifichiamo i dati per la connessione nel file hibernate-config.xml
    66. Il componente login
      • Importiamo nel path opportuno i due files di configurazione di spring
      • Modifichiamo i dati per la connessione nel file hibernate-config.xml
    67. Il componente login
      • Per conservare lo stato dell'utente creiamo una classe UserState nel package
        • tapestry.app-package /state
    68. Il componente login
      • Aggiungiamo i riferimenti allo state object e allo userService, e il metodo getter per accedere allo state object in Login.java
    69. Il componente login
      • Aggiungiamo i riferimenti allo state object e allo userService, e il metodo getter per accedere allo state object in Login.java
    70. Il componente login
      • Aggiungiamo i riferimenti allo state object e allo userService, e il metodo getter per accedere allo state object in Login.java
    71. Il componente login
      • Aggiungiamo i riferimenti allo state object e allo userService, e il metodo getter per accedere allo state object in Login.java
    72. Il componente login
      • Modifichiamo i metodi login e logout in Login.java
    73. Il componente login
      • Ora con il tapestry component If facciamo in modo che nel template Login.tml venga mostrato il form di login solo se non ci si è loggati e l'inverso per il comando di logout.
      • L'If component ha la seguente forma:
    74. Il componente login
      • Il Login.tml diventa quindi:
    75. Il componente login
      • Adesso, per verificare quanto realizzato inseriamo un utente di prova sul db
    76. Il componente login
      • Login:
    77. Il componente login
      • Login:
    78.  
    79. La pagina d'iscrizione utente
      • Veniamo ora a esaminare un componente molto potente, il beanEditForm.
    80. La pagina d'iscrizione utente
      • Il beanEditForm:
        • Accetta i seguenti parametri:
          • object : l'oggetto che si vuole editare
          • remove : una lista di nomi di attributi dell'oggetto da editare, di cui si vuol inibire il rendering
          • submitLabel : l'etichetta del submit button del form
          • model : un'istanza di org.apache.tapestry.beaneditor.BeanModel
          • reorder : una lista di nomi di attributi nell'ordine desiderato
          • clientValidation : true|false
    81. La pagina d'iscrizione utente
      • Il beanEditForm:
        • mappa
          • Boolean con checkbox
          • java.util.Date con DateField
          • Enum con select
          • String e Number con textField
    82. La pagina d'iscrizione utente
      • Il beanEditForm:
        • mappa
          • Boolean con checkbox
          • java.util.Date con DateField
          • Enum con select
          • Tipi primitivi, wrapper e String con textField
        • Può essere ulteriormente configurato annotando opportunamente l'oggetto che gli si passa.
    83. La pagina d'iscrizione utente
      • Aggiungiamo il package account all'interno della root delle page component classes e creaiamo la classe CreateAccount.java
    84. La pagina d'iscrizione utente
      • Aggiungiamo il package account all'interno della root delle page component classes e creaiamo la classe CreateAccount.java
    85. La pagina d'iscrizione utente
      • ...e il template.
    86. La pagina d'iscrizione utente
      • ...e il template.
    87. La pagina d'iscrizione utente
      • ...e il template.
    88. La pagina d'iscrizione utente
      • ...e il template.
    89. La pagina d'iscrizione utente
      • http://localhost:8080/jukeweb/account/create
    90. La pagina d'iscrizione utente
      • Come forse avrete notato la url non è come ci si aspetterebbe /account/createaccount, bensì /account/create. In sostanza tapestry ignora la ripetizione di account, questo consente di avere url più pulite .
      • Resta da realizzare un link per accedere alla pagina di iscrizione, e aggiungere un riferimento al servizio verso il db nella classe della pagina per salvare l'utente creato.
    91. La pagina d'iscrizione utente
      • Login.tml
    92. La pagina d'iscrizione utente
      • CreateAccount.java
    93. La pagina d'iscrizione utente
      • CreateAccount.java
    94. La pagina d'iscrizione utente
      • CreateAccount.java
    95.  
    96. L'upload di un file
      • Tapestry incapsula il componente e i servizi, necessari per effettuare l'upload, in un modulo a parte tapestry-upload.jar
      • Quindi aggiungiamo la dipendenza corrispondente nel pom.xml
    97. L'upload di un file
      • Creiamo una class page track/CreateTrack.java
    98. L'upload di un file
      • Quindi il template track/CreateTrack.tml
    99. L'upload di un file
      • Una volta caricato il file dobbiamo inserire i dati ad essa relativi
      • Modifichiamo il metodo upload come segue
    100. L'upload di un file
      • Una volta caricato il file dobbiamo inserire i dati ad essa relativi
      • Modifichiamo il metodo upload come segue
    101. L'upload di un file
      • Una volta caricato il file dobbiamo inserire i dati ad essa relativi
      • Modifichiamo il metodo upload come segue
    102. L'upload di un file
      • Aggiungiamo un attributo Track con i relativi accessor, per editare le informazioni.
    103. L'upload di un file
      • Occorre anche definire un attributo StylesEnum
      • Essendo una enum, il beanEditForm la gestirà con una select.
    104. L'upload di un file
      • Infine ci servono i riferimenti allo stateObject e al servizio per salvare la traccia creata
    105. L'upload di un file
      • Infine ci servono i riferimenti allo stateObject e al servizio per salvare la traccia creata
    106. L'upload di un file
      • Infine ci servono i riferimenti allo stateObject e al servizio per salvare la traccia creata
    107. L'upload di un file
      • Infine ci servono i riferimenti allo stateObject e al servizio per salvare la traccia creata
    108. L'upload di un file
      • Infine ci servono i riferimenti allo stateObject e al servizio per salvare la traccia creata
    109. L'upload di un file
      • Infine dobbiiamo modificare il template, in modo da mostrare prima l'upload form, e poi il track form.
    110. L'upload di un file
      • Infine dobbiiamo modificare il template, in modo da mostrare prima l'upload form, e poi il track form.
    111. L'upload di un file
      • Infine dobbiiamo modificare il template, in modo da mostrare prima l'upload form, e poi il track form.
    112. L'upload di un file
      • Infine dobbiiamo modificare il template, in modo da mostrare prima l'upload form, e poi il track form.
    113.  
    114. Realizziamo il jukebox
      • Bene, siamo giunti all'ultimo elemento dell'applicazione
      • Nel realizzarlo vedremo
        • come untilizzare il grid component
    115. Realizziamo il jukebox
      • Bene, siamo giunti all'ultimo elemento dell'applicazione
      • Nel realizzarlo vedremo
        • come untilizzare il grid component
        • come realizzare un componente che scrive direttamente sull'output (privo di template)
    116. Realizziamo il jukebox
      • Bene, siamo giunti all'ultimo elemento dell'applicazione
      • Nel realizzarlo vedremo
        • come untilizzare il grid component
        • come realizzare un componente che scrive direttamente sull'output (privo di template)
        • come ottenere uno stream verso una risorsa tramite Tapestry
    117. Realizziamo il jukebox
      • Modifichiamo quindi la Start page, e aggiungiamole gli attributi
    118. Realizziamo il jukebox
      • Modifichiamo quindi la Start page, e aggiungiamole gli attributi
    119. Realizziamo il jukebox
      • Infine faccio in modo che quando la pagina viene inizializzata, carichi dal database le tracce.
    120. Realizziamo il jukebox
      • Infine faccio in modo che quando la pagina viene inizializzata, carichi dal database le tracce.
    121. Realizziamo il jukebox
      • Quindi inseriamo il component grid nel template
    122. Realizziamo il jukebox
      • Riordiniamo gli attributi
    123. Realizziamo il jukebox
      • Aggiungiamo la paginazione
    124. Realizziamo il jukebox
      • Gestiamo il rating con un componente specifico
    125. Realizziamo il jukebox
      • Il componente Rating.java
    126. Realizziamo il jukebox
      • Il componente Rating.java
    127. Realizziamo il jukebox
      • Il componente Rating.java
    128. Realizziamo il jukebox
      • Il componente Rating.java
    129. Realizziamo il jukebox
      • Il componente Rating.java
    130. Realizziamo il jukebox
      • Il componente Rating.java
    131. Realizziamo il jukebox
      • Infine sovrascriviamo la fileNameCell
    132. Realizziamo il jukebox
      • Infine sovrascriviamo la fileNameCell
    133. Realizziamo il jukebox
      • Infine sovrascriviamo la fileNameCell
    134. Realizziamo il jukebox
      • Il component Player.java
    135. Realizziamo il jukebox
      • Il component Player.java
    136. Realizziamo il jukebox
      • Il component Player.java
    137. Realizziamo il jukebox
      • Il component Player.java
    138. Realizziamo il jukebox
      • Il component Player.java
    139. Realizziamo il jukebox
      • Il component Player.java
    140. Realizziamo il jukebox
      • Il component Player.java
    141. Realizziamo il jukebox
      • La stream page TrackStream.java
    142. Realizziamo il jukebox
      • La stream page TrackStream.java
    143. Realizziamo il jukebox
      • http://localhost:8080/jukeweb/
    144.  
    145. Ringraziamenti
      • Un ringraziamento va a tutti coloro che con il loro impegno e disponibilità hanno permesso la realizzazione del Javaday
      • Naturalmente agli sponsor
      • E in particolare a Mara Marzocchi, Java Italian Portal webmaster, per l'incoraggiamento, il sostegno e la disponibilità (ma anche i consigli, le proposte e le idee).
    146. Tapestry5 in action
      • FINE
      • Marco Pugliese
      • [email_address]

    + bobpuleybobpuley, 2 years ago

    custom

    3202 views, 0 favs, 1 embeds more stats

    tapestry 5 in azione

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 3202
      • 3201 on SlideShare
      • 1 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 50
    Most viewed embeds
    • 1 views on http://192.168.10.100

    more

    All embeds
    • 1 views on http://192.168.10.100

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories