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 Ausschliesslich Java und HTML
Keine XML Konfiguration
Objektorientierte Programmierung im Web
Einfaches erstellen eigener Komponenten
Sehr aktive Community
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“)); = <h1>Hallo, Welt</h1>
Wie geht das? Java + HTML <h1 wicket:id=“ subject “>Ein statischer Text</h1> + add(new Label(„ subject “, „Hallo, Welt“)); = <h1>Hallo, Welt</h1>
Wie geht das? Java + HTML <h1 wicket:id=“subject“> Ein statischer Text </h1> + add(new Label(„subject“, „ Hallo, Welt “)); = <h1> Hallo, Welt </h1>
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
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>
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>
(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>
Wicket als Apache Projekt Wicket gibt es seit 2004 Seit 2007 ein Apache Projekt Mittlerweile Top Level Projekt http://wicket.apache.org Aktuell ist Version 1.4.6 Die Arbeit an 1.5 ist voll im Gange
Wicket verwenden < dependency > < groupId > org.apache.wicket </ groupId > < artifactId > wicket </ artifactId > < version > 1.4.6 </ version > </ dependency >
Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
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ß
Wicket Bestandteile Application
Session
Request Lifecycle
Komponenten
Behaviors
Modelle
Wicket Bestandteile Application
Session
Request Lifecycle
Komponenten
Behaviors
Modelle
Application Einstiegspunkt in die Anwendung
Initialisierung Spring
Autorisierung Festlegen der Startseite
Wird in der web.xml Datei festgelegt
Grundsätzlich: Konfiguration über die API anstatt in XML Dokumenten
Wicket Bestandteile Application
Session
Request Lifecycle
Komponenten
Behaviors
Modelle
Wicket Bestandteile Application
Session

Wicket Kurzübersicht

  • 1.
    Apache Wicket GerhardHipfinger [email_address]
  • 2.
    Agenda Was istWicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  • 3.
    Agenda Was istWicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  • 4.
    Wicket ist... …ein Web Framework … komponentenorientiert … nur Java & HTML … ein Open Source Projekt (Apache)
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
    Wie geht das?Java + HTML <h1 wicket:id=“subject“>Ein statischer Text</h1>
  • 11.
    Wie geht das?Java + HTML <h1 wicket:id=“subject“>Ein statischer Text</h1> + add(new Label(„subject“, „Hallo, Welt“));
  • 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.
    Wie geht das?Java + HTML <h1 wicket:id=“ subject “>Ein statischer Text</h1> + add(new Label(„ subject “, „Hallo, Welt“)); = <h1>Hallo, Welt</h1>
  • 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.
    Pures HTML Designerfreundlich Sie müssen keine neue Sprache lernen Kein serverseitiges Scripting im Markup Entwickler „pfuschen“ nicht ins Design Designer „pfuschen“ nicht in den Code
  • 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.
    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.
    (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.
    Wicket als ApacheProjekt Wicket gibt es seit 2004 Seit 2007 ein Apache Projekt Mittlerweile Top Level Projekt http://wicket.apache.org Aktuell ist Version 1.4.6 Die Arbeit an 1.5 ist voll im Gange
  • 20.
    Wicket verwenden <dependency > < groupId > org.apache.wicket </ groupId > < artifactId > wicket </ artifactId > < version > 1.4.6 </ version > </ dependency >
  • 21.
    Agenda Was istWicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  • 22.
    Wicket Konzept Wicketpräsentiert dem Entwickler ein Single Threaded, komponentenorientiertes Entwicklungsmodell Ähnlich wie Entwicklung mit Swing Nur macht das ganze mit Wicket auch Spaß
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
    Wird in derweb.xml Datei festgelegt
  • 39.
    Grundsätzlich: Konfiguration überdie API anstatt in XML Dokumenten
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
    Wicket Request Lifecycleparameters page component version interface event listener ajax listener page resource ... onClick onSubmit . . render page components resource redirect detach store page
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
    Wicket Komponenten KomponentenKapseln das Markup von der fachlichen Implementierung Rendern ihren Inhalt beim Response Empfangen Events beim Request Es gibt reichlich Komponenten im Wicket Core
  • 60.
    in der OpenSource Szene
  • 61.
    Komponenten Eigenschaften JedeKomponente 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.
    Komponenten Eigenschaften Komponentenkö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.
    Komponenten Eigenschaften Komponentenkö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.
    Komponenten Eigenschaften Komponentenkö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.
    Komponenten & EventsKomponenten 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()); } }
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 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.
    Wicket Behaviors Beispiellink.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.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
    Model – View– Controller Modelle erlauben es Komponenten Daten zu speichern und anzuzeigen Modelle verbinden Komponenten mit POJO's Komponente Markup Modell
  • 81.
    POJO Inhalt indie Komponenten new Label(„lastName“, person.getLastName()); Langweilig und kein „Binding“ oder new Label(„plz“, person.getAddress().getZip()); Nicht NPE fest und kein „Binding“
  • 82.
    Verwendung von ModellenPropertyModel new PropertyModel(p, „firstName“)
  • 83.
    new PropertyModel(p, „address“,„zip“) CompoundPropertyModel setModelObject(new CompoundPropertyModel(p)); add(new Label(„firstName)); add(new Label(„address.zip“)); Auch Böse -> Refactoring!
  • 84.
    Bindgen und WicketModell: 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.
    Agenda Was istWicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  • 86.
    Wicket Anwendungen TestenKomponenten 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.
    Hello, World testenpublic class HelloPageTest { @Test public void testHelloWorldLabel() { WicketTester tester = new WicketTester(); tester.startPage(HelloPage. class ); tester.assertLabel( &quot;msg&quot; , &quot;Hello, World!&quot; ); } }
  • 88.
    Wicket Anwendungen testenDas ganze Geheimnis liegt in der Klasse „WicketTester“ WicketTester simuliert die Server Laufzeitumgebung Testen von Links
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
    Formulare Testen EigeneUtility 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.
    Das erste Hello,World! DEMO
  • 95.
  • 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 :)