Slideshare.net (beta)

 
Post: 
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons



All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 1 (more)

Tapestry 5 in Action Pratica

From maraexception, 7 months ago

Jakarta Tapestry è un framework basato su un modello a componenti more

411 views  |  0 comments  |  0 favorites  |  14 downloads
 
 
 

Groups/Events

 
 

Privacy InfoNew!

This slideshow is Public

 
Embed in your blog
Embed (wordpress.com)
custom

Slideshow Statistics
Total Views: 411
on Slideshare: 411
from embeds: 0* * Views from embeds since 21 Aug, 07

Slideshow transcript

Slide 1: Tapestry5 in action Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Pratica Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 1 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 2: Indice Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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 ● Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 2 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 3: Tapestry5 in action Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Preparare l'ambiente Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 3 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 4: Preparare l'ambiente Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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 – Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 4 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 5: Preparare l'ambiente Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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) – mvn install:install-file -DgroupId=jukemodel -DartifactId=jukemodel -Dversion=1.0.0 -Dpackaging=jar -Dfile=/jarfile/path -DpomFile=/pomfile/path mvn install:install-file -DgroupId=javax.transaction -DartifactId=jta -Dversion=1.0.1B -Dpackaging=jar -Dfile=/jarfile/path mvn install:install-file -DgroupId=jid3lib -DartifactId=jid3lib -Dversion=0.5.4 -Dpackaging=jar -Dfile=/jarfile/path mvn install:install-file -DgroupId=JLayer -DartifactId=JLayer -Dversion=1.0.0 -Dpackaging=jar -Dfile=/jarfile/path Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 5 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 6: Preparare l'ambiente Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Ok, apriamo eclipse creiamo il nostro maven2 ● project “jukeweb” File -> new -> project – Maven2 -> Maven2 project ● Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 6 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 7: Preparare l'ambiente Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Create project: Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 7 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 8: Preparare l'ambiente Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Configure project: Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 8 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 9: Preparare l'ambiente Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 9 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 10: Preparare l'ambiente Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Ora dovremmo avere tutte le librerie necessarie. Non ci resta che creare e configurare 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

Slide 11: Tapestry5 in action Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Creiamo la nostra prima page Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 11 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 12: Creiamo la nostra prima page Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Start.java: package javaday.jukebox.web.pages; public class Start { } Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 12 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 13: Creiamo la nostra prima page Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Start.tml: <html> <head> <title>home page</title> </head> <body> Benvenuti nel mondo di Tapestry!<br /> E' stata renderizzata la pagina ${class.simpleName}! </body> </html> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 13 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 14: Creiamo la nostra prima page Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Start.tml: <html> <head> <title>home page</title> </head> <body> Benvenuti nel mondo di Tapestry!<br /> E' stata renderizzata la pagina ${class.simpleName}! </body> </html> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 14 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 15: Creiamo la nostra prima page Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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 ● Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 15 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 16: Creiamo la nostra prima page Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Bene, è giunto il momento di lanciare per la prima volta l'applicazione: Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 16 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 17: Creiamo la nostra prima page Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Configuriamo jetty: Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 17 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 18: Creiamo la nostra prima page Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Configuriamo e lanciamo jetty: Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 18 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 19: Creiamo la nostra prima page Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Infine digitiamo l'url sul browser: ● http://localhost:8080/jukeweb/ – Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 19 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 20: Tapestry5 in action Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Creiamo un componente per gestire il layout Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 20 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 21: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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 – Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 21 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 22: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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 Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 22 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 23: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Border.java (versione 1) ● package javaday.jukebox.web.components; public class Border { } Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 23 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 24: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Border.tml (versione 1) ● <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <head> <title>titolo finestra</title> <link rel="stylesheet" href="/jukeweb/styles/layout.css"></link> <link rel="stylesheet" href="/jukeweb/styles/header.css"></link> <link rel="stylesheet" href="/jukeweb/styles/menu.css"></link> <link rel="stylesheet" href="/jukeweb/styles/body.css"></link> <script src="/jukeweb/js/script.js" ></script> <script src="/jukeweb/js/audio-player.js" ></script> </head> ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 24 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 25: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Border.tml (versione 1) ● ... <body> <div class="page"> <div class="header"> <div class="gkey" onclick="document.location.href='/jukeweb'" onmouseover="this.style.cursor='hand'"></div> <div class="title">titolo pagina</div> </div> <div class="menu"> menu </div> <div class="body"> <t:body /> </div> <div class="footer"> <a href="mailto:bobpuley@gmail.com"> Created by bobpuley@gmail.com </a> </div> </div> </body> </html> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 25 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 26: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Border.tml (versione 1) ● ... <body> <div class="page"> <div class="header"> <div class="gkey" onclick="document.location.href='/jukeweb'" onmouseover="this.style.cursor='hand'"></div> <div class="title">titolo pagina</div> </div> <div class="menu"> menu </div> <div class="body"> <t:body /> </div> <div class="footer"> <a href="mailto:bobpuley@gmail.com"> Created by bobpuley@gmail.com </a> </div> </div> </body> </html> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 26 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 27: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Adeguiamo quindi il template Start.tml ● <t:border xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> Benvenuti nel mondo di Tapestry!<br /> E' stata renderizzata la pagina ${class.simpleName}! </t:border> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 27 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 28: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License http://localhost:8080/jukeweb/ ● Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 28 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 29: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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. Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 29 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 30: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Un parametro di un componente altro non è ● che un'attributo d'istanza opportunamente annotato (@Parameter) e corredato dei metodi accessor. Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 30 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 31: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Border.java (versione 2) ● package javaday.jukebox.web.components; import org.apache.tapestry.annotations.Parameter; public class Border { @Parameter(defaultPrefix="literal") private String windowTitle = "Untitled"; @Parameter(defaultPrefix="literal") private String pageTitle = "Untitled"; ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 31 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 32: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Border.java (versione 2) ● package javaday.jukebox.web.components; import org.apache.tapestry.annotations.Parameter; public class Border { Binding prefix: ● prop @Parameter(defaultPrefix="literal") ● literal private String windowTitle = "Untitled"; ● asset ● block @Parameter(defaultPrefix="literal") ● component private String pageTitle = "Untitled"; ● traslate ● Message ... ● validate Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 32 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 33: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Border.java (versione 2) ● ... public String getPageTitle() { return pageTitle; } public void setPageTitle(String pageTitle) { this.pageTitle = pageTitle; } public String getWindowTitle() { return windowTitle; } public void setWindowTitle(String windowTitle) { this.windowTitle = windowTitle; } } Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 33 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 34: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Adeguiamo quindi il template Start.tml ● <t:border pageTitle="Listen everything you want" windowTitle="Home" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> Benvenuti nel mondo di Tapestry!<br /> E' stata renderizzata la pagina ${class.simpleName}! </t:border> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 34 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 35: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License http://localhost:8080/jukeweb/ ● Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 35 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 36: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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 Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 36 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 37: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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) Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 37 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 38: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License (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”)) Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 38 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 39: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Aggiungiamo a Border.java ● ... @Inject @Path("context:styles/layout.css") private Asset layout; @Inject @Path("context:styles/header.css") private Asset header; @Inject @Path("context:styles/menu.css") private Asset menu; @Inject @Path("context:styles/body.css") private Asset body; ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 39 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 40: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License (...continua) ● ... @Inject @Path("classpath:js/script.js") private Asset script; @Inject @Path("classpath:js/audio-player.js") private Asset playerScript; ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 40 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 41: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Aggiungiamo i metodi getter e modifichiamo il ● template ... <head> <title>${windowTitle}</title> <link rel="stylesheet" href="${layout}"></link> <link rel="stylesheet" href="${header}"></link> <link rel="stylesheet" href="${menu}"></link> <link rel="stylesheet" href="${body}"></link> <script src="${script}" ></script> <script src="${playerScript}" ></script> </head> ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 41 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 42: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Dopo aver salvato ed eseguito diamo uno ● sguardo al codice risultante ... <link href="/jukeweb/styles/layout.css" rel="stylesheet"> <link href="/jukeweb/styles/header.css" rel="stylesheet"> <link href="/jukeweb/styles/menu.css" rel="stylesheet"> <link href="/jukeweb/styles/body.css" rel="stylesheet"> <script src="/jukeweb/assets/js/script.js"></script> <script src="/jukeweb/assets/js/audio-player.js"></script> ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 42 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 43: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Creiamo un componente per il menù. ● Menu.java package javaday.jukebox.web.components; import org.apache.tapestry.annotations.OnEvent; public class Menu { @OnEvent(value="action") String openPage(String pageName){ return pageName; } } Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 43 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 44: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Creiamo un componente per il menù. ● Menu.java package javaday.jukebox.web.components; import org.apache.tapestry.annotations.OnEvent; public class Menu { @OnEvent(value="action") String openPage(String pageName){ return pageName; } } Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 44 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 45: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License E il template Menu.tml ● <div class="vocimenu" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <div class="vocemenu"> <a t:type="ActionLink" context="literal:start">Home</a> </div> <div class="login"><t:login /></div> </div> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 45 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 46: Creiamo un componente.. Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License E il template Menu.tml ● <div class="vocimenu" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <div class="vocemenu"> <a t:type="ActionLink" context="literal:start">Home</a> </div> <div class="login"><t:login /></div> </div> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 46 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 47: Tapestry5 in action Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Creiamo un componente per il login/logout Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 47 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 48: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License 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 Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 48 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 49: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Login.java ● package javaday.jukebox.web.components; ... public class Login { @Persist private String _userName; private String _password; @Component(id = "password") private PasswordField _passwordField; @Component(id="loginForm") private Form _form; ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 49 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 50: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Login.java ● package javaday.jukebox.web.components; ... public class Login { @Persist private String _userName; private String _password; @Component(id = "password") private PasswordField _passwordField; @Component(id="loginForm") private Form _form; ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 50 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 51: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Login.java ● package javaday.jukebox.web.components; ... public class Login { @Persist private String _userName; private String _password; @Component(id = "password") private PasswordField _passwordField; @Component(id="loginForm") private Form _form; ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 51 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 52: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License (... continua) ● ... @OnEvent(component="loginForm",value="success") void login() { boolean valid = false; if(!valid){ _form.recordError(_passwordField, "Invalid user name or password."); } } @OnEvent(component="logout",value="action") void logout() { } ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 52 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 53: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License (... continua) ● ... @OnEvent(component="loginForm",value="success") void login() { boolean valid = false; if(!valid){ _form.recordError(_passwordField, "Invalid user name or password."); } } @OnEvent(component="logout",value="action") void logout() { } ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 53 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 54: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License (... continua) ● ... @OnEvent(component="loginForm",value="success") void login() { boolean valid = false; if(!valid){ _form.recordError(_passwordField, "Invalid user name or password."); } } @OnEvent(component="logout",value="action") void logout() { } ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 54 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 55: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License (... continua) ● ... public String getPassword() { return _password; } public void setPassword(String _password) { this._password = _password; } public String getUserName() { return _userName; } public void setUserName(String name) { _userName = name; } } Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 55 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 56: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Login.tml ● <t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <div class="formLogin"> <t:form t:id="loginForm"> <div class="title">Login</div> <t:errors /> <label t:type="label" t:for="userName" class="label"> user </label> <div class="element"> <t:textField t:id="userName" t:value="userName" t:validate="required" /> </div> ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 56 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 57: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Login.tml ● <t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <div class="formLogin"> <t:form t:id="loginForm"> <div class="title">Login</div> <t:errors /> <label t:type="label" t:for="userName" class="label"> user </label> <div class="element"> <t:textField t:id="userName" t:value="userName" t:validate="required" /> </div> ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 57 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 58: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Login.tml ● <t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <div class="formLogin"> <t:form t:id="loginForm"> <div class="title">Login</div> <t:errors /> <label t:type="label" t:for="userName" class="label"> user </label> <div class="element"> <t:textField t:id="userName" t:value="userName" t:validate="required" /> </div> ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 58 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 59: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Login.tml ● <t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <div class="formLogin"> <t:form t:id="loginForm"> <div class="title">Login</div> <t:errors /> <label t:type="label" t:for="userName" class="label"> user </label> <div class="element"> <t:textField t:id="userName" t:value="userName" t:validate="required" /> </div> ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 59 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 60: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License (..continua) ● ... <label t:type="label" t:for="password" class="label"> pass </label> <div class="element"> <t:passwordField t:id="password" t:validate="required, minLength=5" /> </div> <div class="submit"> <input type="submit" value="login"/> </div> </t:form> </div> <div class="vocemenu"> <a href="#" t:type="actionLink" t:id="logout">logout</a> </div> </t:container> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 60 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 61: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License (..continua) ● ... <label t:type="label" t:for="password" class="label"> pass </label> <div class="element"> <t:passwordField t:id="password" t:validate="required, minLength=5" /> </div> <div class="submit"> <input type="submit" value="login"/> </div> </t:form> </div> <div class="vocemenu"> <a href="#" t:type="actionLink" t:id="logout">logout</a> </div> </t:container> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 61 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 62: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License (..continua) ● ... <label t:type="label" t:for="password" class="label"> pass </label> <div class="element"> <t:passwordField t:id="password" t:validate="required, minLength=5" /> </div> <div class="submit"> <input type="submit" value="login"/> </div> </t:form> </div> <div class="vocemenu"> <a href="#" t:type="actionLink" t:id="logout">logout</a> </div> </t:container> Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 62 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 63: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License E' giunto il momento di integrare spring e il ● backend per comunicare con il database Primo, modificare il filter nel web.xml ● [...] <filter> <filter-name>juke</filter-name> <filter-class> org.apache.tapestry.spring.TapestrySpringFilter </filter-class> </filter> [...] Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 63 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 64: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Secondo, aggiungere al web.xml: ● Il listener di spring che si vuole usare – Il context-param che punta ai files di configurazione – [...] <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/bean.xml, /WEB-INF/config/hibernate-config.xml </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> [...] Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 64 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 65: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Importiamo nel path opportuno i due files di ● configurazione di spring Modifichiamo i dati per la connessione nel file ● hibernate-config.xml [...] <bean id="jukeDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.gjt.mm.mysql.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/jukebox" /> <property name="username" value="root" /> <property name="password" value="" /> </bean> [...] Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 65 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 66: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Importiamo nel path opportuno i due files di ● configurazione di spring Modifichiamo i dati per la connessione nel file ● hibernate-config.xml [...] <bean id="jukeDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.gjt.mm.mysql.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/jukebox" /> <property name="username" value="root" /> <property name="password" value="" /> </bean> [...] Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 66 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 67: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Per conservare lo stato dell'utente creiamo una ● classe UserState nel package tapestry.app-package/state – package javaday.jukebox.web.state; import javaday.jukebox.model.dto.User; public class UserState { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public boolean isLoggedIn(){ return user != null && user.getId() != null; } } Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 67 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 68: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Aggiungiamo i riferimenti allo state object e allo ● userService, e il metodo getter per accedere allo state object in Login.java ... @ApplicationState private UserState _userState; @Inject private IUserService _userService; public UserState getUserState() { return _userState; } ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 68 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 69: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Aggiungiamo i riferimenti allo state object e allo ● userService, e il metodo getter per accedere allo state object in Login.java ... @ApplicationState private UserState _userState; @Inject private IUserService _userService; public UserState getUserState() { return _userState; } ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 69 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 70: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Aggiungiamo i riferimenti allo state object e allo ● userService, e il metodo getter per accedere allo state object in Login.java ... @ApplicationState private UserState _userState; @Inject private IUserService _userService; public UserState getUserState() { return _userState; } ... Marco Pugliese - bobpuley@gmail.com – Java Italian Portal 70 Tapestry5 in action Javaday Roma - 01/12/2007

Slide 71: Il componente login Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Aggiungiamo i riferimenti allo state object e allo ●