• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Apache Wicket - Tours JUG Mars 2009
 

Apache Wicket - Tours JUG Mars 2009

on

  • 1,275 views

 

Statistics

Views

Total Views
1,275
Views on SlideShare
1,274
Embed Views
1

Actions

Likes
0
Downloads
24
Comments
0

1 Embed 1

http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />

Apache Wicket - Tours JUG Mars 2009 Apache Wicket - Tours JUG Mars 2009 Presentation Transcript

  • Apache Wicket Java User Group - Tours Mercredi 11 Mars 2009
  • Romain Lucas • Polytech'Tours • Orange Business Services — online multimedia • Wicket • SRMvision • Wicket r.lucas@srmvision.com http://twitter.com/rlucas37 2
  • Cedric Gatay • Polytech'Tours • Orange Business Services — online multimedia • Struts • SRMvision • Wicket c.gatay@srmvision.com http://twitter.com/Cedric_Gatay 3
  • Ce soir... Wicket ? Principes Prise en main Pour aller plus loin... 4
  • Wicket ? • Open Source • Java et xHTML uniquement • orienté composant • développement d’une application «à la Swing» • objet au maximum 5
  • Historique wicket.apache.org Wicket 1.3.3 15 octobre 2006 7 avril 2008 Wicket 1.0 Wicket 1.2.3 Wicket 1.4-m1 7 juin 2005 31 octobre 2006 2 mai 2008 Wicket 1.0.2 Wicket 1.2.4 Wicket 1.3.1 Wicket 1.4-m2 22 août 2005 24 décembre 2006 5 février 2008 2 juin 2008 Wicket 1.0.1 Wicket 1.1 Wicket 1.2.1 Wicket 1.2.5 Wicket 1.2.7 Wicket 1.4-m3 Wicket 1.4-rc1 14 juillet 2005 30 octobre 2005 24 juillet 2006 5 février 2007 23 mars 2008 14 juillet 2008 13 novembre 2008 Wicket 1.0.3 Wicket 1.1.1 Wicket 1.2 Wicket 1.2.2 Wicket 1.3 Wicket 1.2.6 Wicket 1.3.2 Wicket 1.3.4 Wicket 1.3.5 Wicket 1.4-rc2 29 août 2005 25 janvier 2006 24 mai 2006 27 août 2006 2 janvier 2007 22 avril 2007 13 mars 2008 27 juin 2008 15 octobre 2008 9 février 2009 1 septembre 2005 1 janvier 2006 1 mai 2006 1 septembre 2006 1 janvier 2007 1 mai 2007 1 septembre 2007 1 janvier 2008 1 mai 2008 1 septembre 2008 1 janvier 2009 1 mai 2009 6
  • Pourquoi ? • RIFE • Cocoon • nombreux frameworks existant • Spring MVC Millstone • • Canyamo OXF • • fichiers XML de config • Maverick • Struts • JPublish SOFIA • • beaucoup de taglibs • JATO • Tapestry • peu de réutilisabilité • Folium • WebWork • Echo ... • 7
  • Les apports • du Java et du xHTML uniquement • pas de XML de configuration • programmation exclusivement objet • communauté active 8
  • Du Java ... • les composants sont des objets • spécialisation par héritage / composition • utilisation de new 9
  • Du xHTML... • le langage connu des designers • pas de code • seulement un namespace xHTML 10
  • Du xHTML... <h1>Hello World !</h1> 11
  • Du xHTML... <h1 wicket:id="msg">Hello World !</h1> 12
  • Du xHTML & Java <h1 wicket:id="msg">Hello World !</h1> et add(new Label("msg", "Hello World !")); 13
  • Du xHTML & Java <h1 wicket:id="msg">Ici</h1> et add(new Label("msg", "Hello World !")); 14
  • Du xHTML & Java <h1 wicket:id="msg"> Ici </h1> et add(new Label("msg", "Hello World !")); <h1>Hello World !</h1> 15
  • Principes • Application • Session • RequestCycle • Components • Behaviors • Models 16
  • Application • seul fichier XML web.xml : <filter> <filter-name>wicket</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>com.srmvision.MonAppli</param-value> </init-param> </filter> • configuration dans MonAppli.java 17
  • Principes • Application • Session • RequestCycle • Components • Behaviors • Models 18
  • Session • encapsule HttpSession • stockage transparent • attributs de l’objet session 19
  • Principes • Application • Session • RequestCycle • Components • Behaviors • Models 20
  • RequestCycle Décode la Identifie la Effectue le Nettoie Répond requête cible traitement Stocke • représente une requête 21
  • Principes • Application • Session • RequestCycle • Components • Behaviors • Models 22
  • Component • une superclasse : wicket.Component • permet le rendu associé au xHTML • peut réagir à des événements 23
  • Component • mapping : • wicket:id lie POJO et xHTML • seule contrainte : respecter la hiérarchie • imbrication de composants 24
  • Component • quelques composants : • Label • Textfield • Link • DatePicker • Panel • DropDownChoice • Form 25
  • Component • création facile public class CounterLinkPanel extends Panel{ ... } 26
  • Principes • Application • Session • RequestCycle • Components • Behaviors • Models 27
  • Behaviors • décorateur de component • agit sur le xHTML • manipulation Markup des component • manipulation Javascript • manipulation en-tête xHTML (fichier css / js...) 28
  • Principes • Application • Session • RequestCycle • Components • Behaviors • Models 29
  • Models reçoit set set Personne TextField IModel p.nom rendu get get 30
  • Models • encapsule les données • Serializable pour stockage en session • relation Composant / Métier • PropertyModel : notation OGNL (Object Graph Notation Language) 31
  • Models new Label("labelNom", personne.getNom()); 32
  • Models new Label("labelNom", personne.getNom()); new Label("labelNom",new PropertyModel(personne,"nom")); 33
  • Models new Label("labelNom", personne.getNom()); new Label("labelNom",new PropertyModel(personne,"nom")); ➡ prévient les NullPointerException 34
  • Models new TextField("textNom", new PropertyModel(personne, "nom")); ➡ dynamique ➡ dépendant du nom 35
  • Prise en main 36
  • Comment ? • http://wicket.apache.org • maven 2 • mvn archetype:generate • mvn jetty:run 37
  • Structure • Java et HTML côte à côte • point d’entrée de l’application 38
  • Par la pratique... • Page • Panel • Link 39
  • Page <body> <h1>Header</h1> <hr /> <span>[...]</span> <hr /> <h1>Footer</h1> </body> 40
  • Page <body> <h1 wicket:id="head" /> <hr /> <wicket:child /> <hr /> <h1 wicket:id="foot" /> </body> 41
  • Page <body> <h1 wicket:id="head" /> <hr /> <wicket:child /> <hr /> <h1 wicket:id="foot" /> </body> 42
  • Page <wicket:extend> <span wicket:id="content" /> </wicket:extend> 43
  • Page public class BasePage extends WebPage{ public BasePage(){ add(new Label("head", "Header")); add(new Label("foot", "Footer")); } } 44
  • Page public class MaPage extends BasePage{ public MaPage(){ super(); add(new MonPanel("content")); } } 45
  • Par la pratique... • Page • Panel • Link 46
  • Panel • composant complexe • réutilisable • tag spécifique 47
  • Panel <wicket:panel> <span wicket:id="labelTitre" /> <span wicket:id="labelInfo" /> </wicket:panel> 48
  • Panel public class PanelInfo extends Panel{ public PanelInfo(String id,String titre,String info){ super(id); add(new Label("labelTitre",titre)); add(new Label("labelInfo",info)); } } 49
  • Panel <html> <span wicket:id="monPanel" /> </html> 50
  • Panel public class UtilisationPanel extends WebPage{ public UtilisationPanel(){ add(new PanelInfo("monPanel","Nom","Romain")); } } 51
  • Par la pratique... • Page • Panel • Link 52
  • Link Link increment = new Link("lien") { @Override public void onClick() { setResponsePage(HomePage.class); } }; 53
  • Link Link increment = new Link("lien") { @Override public void onClick() { setResponsePage(new HomePage("Hello World!")); } }; 54
  • Pour aller plus loin... 55
  • Tests unitaires • tester les composants • lancer les tests sans lancer de serveur • test des requêtes Ajax 56
  • Tests unitaires @Test public void labelContainsHelloWorld(){ WicketTester tester = new WicketTester(); tester.startPage(HelloWorld.class); tester.assertLabel("message", "Hello World!"); } 57
  • Configuration • via un paramètre système 1. Development : • facilite le développement 2. Deployment : • meilleures performances 58
  • Mode développement • console de debug Ajax • pas de compression Javascript • pas de cache • messages d’erreurs explicites 59
  • Mode déploiement • mise en cache des ressources • suppression des wicket:id • compression Javascript • pages d’erreurs neutres 60
  • Démonstration 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • Communauté • membre Apache • mailing list : 60 messages / jour • irc.freenode.net / ##wicket 69
  • Projets annexes • Wicket stuff • Databinder • WickeXt • et bien d’autres... 70
  • Bientôt... • Wicket 1.4 : • Java 5 minimum • utilisation des generics • gestion des Portlet 2.0 71
  • Conclusion • séparation stricte présentation et métier • réutilisabilité et qualité du code • excellente communauté 72
  • Littérature 73
  • Questions ?
  • Merci 75
  • Merci 75