Apache Wicket - Tours JUG Mars 2009

1,315 views

Published on

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
1,315
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
32
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide















































































  • Apache Wicket - Tours JUG Mars 2009

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

    ×