Apache Wicket Gerhard Hipfinger [email_address]
Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
Wicket ist... … ein Web Framework … komponentenorientiert … nur Java & HTML … ein Open Source Projekt (Apache)
Wicket Highlights <ul><li>Ausschliesslich Java und HTML
Keine XML Konfiguration
Objektorientierte Programmierung im Web
Einfaches erstellen eigener Komponenten
Sehr aktive Community </li></ul>
Wie geht das? Java + HTML <h1 wicket:id=“subject“>Ein statischer Text</h1>
Wie geht das? Java + HTML <h1 wicket:id=“subject“>Ein statischer Text</h1> + add(new Label(„subject“, „Hallo, Welt“));
Wie geht das? Java + HTML <h1 wicket:id=“subject“>Ein statischer Text</h1> + add(new Label(„subject“, „Hallo, Welt“)); = <...
Wie geht das? Java + HTML <h1 wicket:id=“ subject “>Ein statischer Text</h1> + add(new Label(„ subject “, „Hallo, Welt“));...
Wie geht das? Java + HTML <h1 wicket:id=“subject“> Ein statischer Text </h1> + add(new Label(„subject“, „ Hallo, Welt “));...
Pures HTML Designer freundlich Sie müssen keine neue Sprache lernen Kein serverseitiges Scripting im Markup Entwickler „pf...
No JSP - Yeah <html> <head> <title>Author of book from ISBN number</title> </head> <body> <h1> Result page</h1> <jsp:useBe...
No JSP - Yeah <%@ taglib uri=&quot;http://java.sun.com/jsf/html&quot; prefix=&quot;h&quot; %> <%@ taglib uri=&quot;http://...
(Fast) Pures HTML <div wicket:id=&quot;feedback&quot;></div> <form wicket:id=&quot;form&quot; class=&quot;cmxform&quot;> <...
Wicket als Apache Projekt Wicket gibt es seit 2004 Seit 2007 ein Apache Projekt Mittlerweile Top Level Projekt <ul><li>htt...
Wicket verwenden < dependency > < groupId > org.apache.wicket </ groupId > < artifactId > wicket </ artifactId > < version...
Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
Wicket Konzept Wicket präsentiert dem Entwickler ein Single Threaded, komponentenorientiertes Entwicklungsmodell Ähnlich w...
Wicket Bestandteile <ul><li>Application
Session
Request Lifecycle
Komponenten
Behaviors
Modelle </li></ul>
Wicket Bestandteile <ul><li>Application
Session
Request Lifecycle
Komponenten
Behaviors
Modelle </li></ul>
Application <ul><li>Einstiegspunkt in die Anwendung
Initialisierung </li><ul><li>Spring
Autorisierung </li></ul><li>Festlegen der Startseite
Wird in der web.xml Datei festgelegt
Grundsätzlich: Konfiguration über die API anstatt in XML Dokumenten </li></ul>
Wicket Bestandteile <ul><li>Application
Session
Request Lifecycle
Komponenten
Behaviors
Modelle </li></ul>
Wicket Bestandteile <ul><li>Application
Session
Upcoming SlideShare
Loading in...5
×

Wicket Kurzübersicht

3,231

Published on

Folien zu meinem Vortrag beim JUGAT Meeting am 3. März 2010.

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
3,231
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Wicket Kurzübersicht

  1. 1. Apache Wicket Gerhard Hipfinger [email_address]
  2. 2. Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  3. 3. Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  4. 4. Wicket ist... … ein Web Framework … komponentenorientiert … nur Java & HTML … ein Open Source Projekt (Apache)
  5. 5. Wicket Highlights <ul><li>Ausschliesslich Java und HTML
  6. 6. Keine XML Konfiguration
  7. 7. Objektorientierte Programmierung im Web
  8. 8. Einfaches erstellen eigener Komponenten
  9. 9. Sehr aktive Community </li></ul>
  10. 10. Wie geht das? Java + HTML <h1 wicket:id=“subject“>Ein statischer Text</h1>
  11. 11. Wie geht das? Java + HTML <h1 wicket:id=“subject“>Ein statischer Text</h1> + add(new Label(„subject“, „Hallo, Welt“));
  12. 12. Wie geht das? Java + HTML <h1 wicket:id=“subject“>Ein statischer Text</h1> + add(new Label(„subject“, „Hallo, Welt“)); = <h1>Hallo, Welt</h1>
  13. 13. Wie geht das? Java + HTML <h1 wicket:id=“ subject “>Ein statischer Text</h1> + add(new Label(„ subject “, „Hallo, Welt“)); = <h1>Hallo, Welt</h1>
  14. 14. Wie geht das? Java + HTML <h1 wicket:id=“subject“> Ein statischer Text </h1> + add(new Label(„subject“, „ Hallo, Welt “)); = <h1> Hallo, Welt </h1>
  15. 15. Pures HTML Designer freundlich Sie müssen keine neue Sprache lernen Kein serverseitiges Scripting im Markup Entwickler „pfuschen“ nicht ins Design Designer „pfuschen“ nicht in den Code
  16. 16. No JSP - Yeah <html> <head> <title>Author of book from ISBN number</title> </head> <body> <h1> Result page</h1> <jsp:useBean id=&quot;fred&quot; class=&quot;boox.Book&quot; /> <jsp:setProperty name=&quot;fred&quot; property=&quot;*&quot; /> <% if (fred.getAuthor().equals(&quot;numerous&quot;)) { %> That is not an ISBN number on our database<br> <% } else { %> Author is <jsp:getProperty name=&quot;fred&quot; property=&quot;auth&quot; /> <br> <% } %> Done! </body>
  17. 17. No JSP - Yeah <%@ taglib uri=&quot;http://java.sun.com/jsf/html&quot; prefix=&quot;h&quot; %> <%@ taglib uri=&quot;http://java.sun.com/jsf/core&quot; prefix=&quot;f&quot; %> <f:loadBundle basename=&quot;jsfks.bundle.messages&quot; var=&quot;msg&quot;/> <html> <head> <title>enter your name page</title> </head> <body> <f:view> <h1> <h:outputText value=&quot;#{msg.inputname_header}&quot;/> </h1> <h:form id=&quot;helloForm&quot;> <h:outputText value=&quot;#{msg.prompt}&quot;/> <h:inputText value=&quot;#{personBean.personName}&quot; /> <h:commandButton action=&quot;greeting&quot; value=&quot;#{msg.button_text}&quot; /> </h:form> </f:view> </body> </html>
  18. 18. (Fast) Pures HTML <div wicket:id=&quot;feedback&quot;></div> <form wicket:id=&quot;form&quot; class=&quot;cmxform&quot;> <fieldset> <legend>Erfassung</legend> <ol> <li> <label>Benutzer</label> <input wicket:id=&quot;benutzer.email&quot; type=&quot;text&quot;/> </li> <li> <label>Start</label> <input wicket:id=&quot;start&quot; type=&quot;text&quot;/> </li> </ol>
  19. 19. Wicket als Apache Projekt Wicket gibt es seit 2004 Seit 2007 ein Apache Projekt Mittlerweile Top Level Projekt <ul><li>http://wicket.apache.org </li></ul>Aktuell ist Version 1.4.6 Die Arbeit an 1.5 ist voll im Gange
  20. 20. Wicket verwenden < dependency > < groupId > org.apache.wicket </ groupId > < artifactId > wicket </ artifactId > < version > 1.4.6 </ version > </ dependency >
  21. 21. Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  22. 22. Wicket Konzept Wicket präsentiert dem Entwickler ein Single Threaded, komponentenorientiertes Entwicklungsmodell Ähnlich wie Entwicklung mit Swing Nur macht das ganze mit Wicket auch Spaß
  23. 23. Wicket Bestandteile <ul><li>Application
  24. 24. Session
  25. 25. Request Lifecycle
  26. 26. Komponenten
  27. 27. Behaviors
  28. 28. Modelle </li></ul>
  29. 29. Wicket Bestandteile <ul><li>Application
  30. 30. Session
  31. 31. Request Lifecycle
  32. 32. Komponenten
  33. 33. Behaviors
  34. 34. Modelle </li></ul>
  35. 35. Application <ul><li>Einstiegspunkt in die Anwendung
  36. 36. Initialisierung </li><ul><li>Spring
  37. 37. Autorisierung </li></ul><li>Festlegen der Startseite
  38. 38. Wird in der web.xml Datei festgelegt
  39. 39. Grundsätzlich: Konfiguration über die API anstatt in XML Dokumenten </li></ul>
  40. 40. Wicket Bestandteile <ul><li>Application
  41. 41. Session
  42. 42. Request Lifecycle
  43. 43. Komponenten
  44. 44. Behaviors
  45. 45. Modelle </li></ul>
  46. 46. Wicket Bestandteile <ul><li>Application
  47. 47. Session
  48. 48. Request Lifecycle
  49. 49. Komponenten
  50. 50. Behaviors
  51. 51. Modelle </li></ul>
  52. 52. Wicket Request Lifecycle parameters page component version interface event listener ajax listener page resource ... onClick onSubmit . . render page components resource redirect detach store page
  53. 53. Wicket Bestandteile <ul><li>Application
  54. 54. Session
  55. 55. Request Lifecycle
  56. 56. Komponenten
  57. 57. Behaviors
  58. 58. Modelle </li></ul>
  59. 59. Wicket Komponenten Komponenten Kapseln das Markup von der fachlichen Implementierung Rendern ihren Inhalt beim Response Empfangen Events beim Request Es gibt reichlich Komponenten <ul><li>im Wicket Core
  60. 60. in der Open Source Szene </li></ul>
  61. 61. Komponenten Eigenschaften Jede Komponente hat eine ID (wicket:id) Jede Wicket ID muss auch im Markup vorhanden sein (wird im Entwicklungsmodus geprüft) Die Komponentenhierarchie muss übereinstimmen Kann ein Modell hinterlegt haben
  62. 62. Komponenten Eigenschaften Komponenten können verschachtelt sein <a href=“#“ wicket:id=“link“> <span wicket:id=“msg“>ein text</span> </a> Link link = new Link(„link“) {...}; add(link); link.add(new Label(„msg“,“Ein Text“));
  63. 63. Komponenten Eigenschaften Komponenten können verschachtelt sein <a href=“#“ wicket:id=“link“ > <span wicket:id=“msg“>ein text</span> </a> Link link = new Link(„ link “) {...}; add(link); link.add(new Label(„msg“,“Ein Text“));
  64. 64. Komponenten Eigenschaften Komponenten können verschachtelt sein <a href=“#“ wicket:id=“link“> <span wicket:id=“msg“ >ein text</span> </a> Link link = new Link(„link“) {...}; add(link); link.add (new Label(„ msg “,“Ein Text“));
  65. 65. Komponenten & Events <ul><li>Komponenten können auf Ereignisse reagieren public class BenutzerForm extends Form { public BenutzerForm(String id, Benutzer b) { super(id, new Model(b)); } public void onSubmit() { benutzer.save(); setResponsePage(new BenutzerListePage()); } } </li></ul>
  66. 66. Wicket Bestandteile <ul><li>Application
  67. 67. Session
  68. 68. Request Lifecycle
  69. 69. Komponenten
  70. 70. Behaviors
  71. 71. Modelle </li></ul>
  72. 72. Wicket Behaviors Sind „Decorators“ von Komponenten Können die Komponenten Tags ändern Können JavaScript Events zu Komponenten hinzufügen Können Ajax Verhalten zu Komponenten hinzufügen Sehr nützlich im Zusammenspiel mit JavaScript Bibliotheken wie jQuery
  73. 73. Wicket Behaviors Beispiel link.add(new AbstractBehaviour() { public void onComponentTag(Component component, ComponentTag tag) { tag.put(„ onclick “, „ return conform('Sind sie sicher?'); “); } }); => <a href=“#“ onclick =“ return conform('Sind sie sicher?'); “>Gefährliche Aktion</a>
  74. 74. Wicket Bestandteile <ul><li>Application
  75. 75. Session
  76. 76. Request Lifecycle
  77. 77. Komponenten
  78. 78. Behaviors
  79. 79. Modelle </li></ul>
  80. 80. Model – View – Controller Modelle erlauben es Komponenten Daten zu speichern und anzuzeigen Modelle verbinden Komponenten mit POJO's Komponente Markup Modell
  81. 81. POJO Inhalt in die Komponenten new Label(„lastName“, person.getLastName()); Langweilig und kein „Binding“ oder new Label(„plz“, person.getAddress().getZip()); Nicht NPE fest und kein „Binding“
  82. 82. Verwendung von Modellen <ul><li>PropertyModel </li><ul><li>new PropertyModel(p, „firstName“)
  83. 83. new PropertyModel(p, „address“, „zip“) </li></ul><li>CompoundPropertyModel </li><ul><li>setModelObject(new CompoundPropertyModel(p)); add(new Label(„firstName)); add(new Label(„address.zip“)); </li></ul></ul>Auch Böse -> Refactoring!
  84. 84. Bindgen und Wicket Modell: public class Address { public String city; } @Bindable public class Person { public Address address; } Und das Binding: add ( new Label ( &quot;city&quot; , BindingModel. of ( personModel, new PersonBinding () . address () . city ())) ; Stabil bei Refactoring!
  85. 85. Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  86. 86. Wicket Anwendungen Testen Komponenten können direkt (Code) oder über das Markup getestet werden Test können ohne Server ausgeführt werden Ajax kann getestet werden (die Server Seite) Tests können in der IDE oder in Ant und Maven builds laufen Hohe Testfallabdeckung möglich!
  87. 87. Hello, World testen public class HelloPageTest { @Test public void testHelloWorldLabel() { WicketTester tester = new WicketTester(); tester.startPage(HelloPage. class ); tester.assertLabel( &quot;msg&quot; , &quot;Hello, World!&quot; ); } }
  88. 88. Wicket Anwendungen testen Das ganze Geheimnis liegt in der Klasse „WicketTester“ WicketTester simuliert die Server Laufzeitumgebung Testen von <ul><ul><li>Links
  89. 89. Modell Zuständen
  90. 90. Navigation
  91. 91. Komponentenzuständen
  92. 92. Formularen </li></ul></ul>
  93. 93. Formulare Testen Eigene Utility Klasse „FormTester“ Mit FormTester kann man einen User und dessen Eingaben simulieren. Felder können gesetzt werden Ein Formular kann abgeschickt und das Ergebnis (Errors, Messages, Zielseiten) abgefragt werden
  94. 94. Das erste Hello, World! DEMO
  95. 95. Fragen? Fragen & Antworten
  96. 96. Gerhard Hipfinger [email_address] openForce Information Technology GesmbH Dresdner Str. 108 / 3. Stock / Top 11 1200 Wien +43 1 3191775 www.openforce.com Das wars :)

×