SlideShare uma empresa Scribd logo
1 de 47
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 ,[object Object]
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 ,[object Object],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 ,[object Object]
Session
Request Lifecycle
Komponenten
Behaviors
Modelle
Wicket Bestandteile ,[object Object]
Session
Request Lifecycle
Komponenten
Behaviors
Modelle
Application ,[object Object]
Initialisierung ,[object Object]
Autorisierung ,[object Object]
Wird in der web.xml Datei festgelegt
Grundsätzlich: Konfiguration über die API anstatt in XML Dokumenten
Wicket Bestandteile ,[object Object]
Session
Request Lifecycle
Komponenten
Behaviors
Modelle
Wicket Bestandteile ,[object Object]
Session

Mais conteúdo relacionado

Semelhante a Wicket Kurzübersicht

Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...kaftanenko
 
Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006Sven Haiges
 
Einführung in die webOS Programmierung
Einführung in die webOS ProgrammierungEinführung in die webOS Programmierung
Einführung in die webOS ProgrammierungMarkus Leutwyler
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEEBenjamin Schmid
 
Entwickeln mit Wordpress
Entwickeln mit WordpressEntwickeln mit Wordpress
Entwickeln mit WordpressBlogwerk AG
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtOPITZ CONSULTING Deutschland
 
Nutze die Macht @ IKT-Forum 09 Linz
Nutze die Macht @ IKT-Forum 09 LinzNutze die Macht @ IKT-Forum 09 Linz
Nutze die Macht @ IKT-Forum 09 LinzEric Eggert
 
Jax07 - Mixing Ajax Swing and Flash
Jax07 - Mixing Ajax Swing and FlashJax07 - Mixing Ajax Swing and Flash
Jax07 - Mixing Ajax Swing and Flashpersillie
 
1&1 Frontend Workshop II
1&1 Frontend Workshop II1&1 Frontend Workshop II
1&1 Frontend Workshop IINico Steiner
 
Gwt Techtalk Präsentation
Gwt Techtalk PräsentationGwt Techtalk Präsentation
Gwt Techtalk Präsentationmlegenhausen
 
Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Stephan Hochdörfer
 
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigermagnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigerThomas Kratz
 
Effiziente Fehlersuche in Web 2.0 Anwendungen
Effiziente Fehlersuche in Web 2.0 AnwendungenEffiziente Fehlersuche in Web 2.0 Anwendungen
Effiziente Fehlersuche in Web 2.0 AnwendungenMartin Leyrer
 

Semelhante a Wicket Kurzübersicht (20)

Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
 
Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006
 
Einführung in die webOS Programmierung
Einführung in die webOS ProgrammierungEinführung in die webOS Programmierung
Einführung in die webOS Programmierung
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
 
Einsteiger Workshop
Einsteiger WorkshopEinsteiger Workshop
Einsteiger Workshop
 
Ruby on Rails SS09 06
Ruby on Rails SS09 06Ruby on Rails SS09 06
Ruby on Rails SS09 06
 
react-de.pdf
react-de.pdfreact-de.pdf
react-de.pdf
 
Entwickeln mit Wordpress
Entwickeln mit WordpressEntwickeln mit Wordpress
Entwickeln mit Wordpress
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
node.js
node.jsnode.js
node.js
 
Nutze die Macht @ IKT-Forum 09 Linz
Nutze die Macht @ IKT-Forum 09 LinzNutze die Macht @ IKT-Forum 09 Linz
Nutze die Macht @ IKT-Forum 09 Linz
 
ARIA
ARIAARIA
ARIA
 
Jax07 - Mixing Ajax Swing and Flash
Jax07 - Mixing Ajax Swing and FlashJax07 - Mixing Ajax Swing and Flash
Jax07 - Mixing Ajax Swing and Flash
 
1&1 Frontend Workshop II
1&1 Frontend Workshop II1&1 Frontend Workshop II
1&1 Frontend Workshop II
 
Workshop Vue js
Workshop Vue jsWorkshop Vue js
Workshop Vue js
 
Gwt Techtalk Präsentation
Gwt Techtalk PräsentationGwt Techtalk Präsentation
Gwt Techtalk Präsentation
 
Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13
 
MVVM Pattern
MVVM Pattern MVVM Pattern
MVVM Pattern
 
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigermagnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
 
Effiziente Fehlersuche in Web 2.0 Anwendungen
Effiziente Fehlersuche in Web 2.0 AnwendungenEffiziente Fehlersuche in Web 2.0 Anwendungen
Effiziente Fehlersuche in Web 2.0 Anwendungen
 

Mais de openForce Information Technology GesmbH (8)

openExperts Talk - 12 Jahre agiles Manifest
openExperts Talk - 12 Jahre agiles ManifestopenExperts Talk - 12 Jahre agiles Manifest
openExperts Talk - 12 Jahre agiles Manifest
 
openExperts Talk - Kunden an die Macht
openExperts Talk - Kunden an die MachtopenExperts Talk - Kunden an die Macht
openExperts Talk - Kunden an die Macht
 
openExperts Talk: die Cloud und ich
openExperts Talk: die Cloud und ichopenExperts Talk: die Cloud und ich
openExperts Talk: die Cloud und ich
 
node.js - Fast event based web application development
node.js - Fast event based web application developmentnode.js - Fast event based web application development
node.js - Fast event based web application development
 
CouchApp - Build scalable web applications and relax
CouchApp - Build scalable web applications and relaxCouchApp - Build scalable web applications and relax
CouchApp - Build scalable web applications and relax
 
Web Testen mit Selenium
Web Testen mit SeleniumWeb Testen mit Selenium
Web Testen mit Selenium
 
Sonar - Software Qualitätsmanagement ohne Schmerzen
Sonar - Software Qualitätsmanagement ohne SchmerzenSonar - Software Qualitätsmanagement ohne Schmerzen
Sonar - Software Qualitätsmanagement ohne Schmerzen
 
jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?
 

Wicket Kurzübersicht

  • 1. Apache Wicket Gerhard Hipfinger [email_address]
  • 2. Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  • 3. Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  • 4. Wicket ist... … ein Web Framework … komponentenorientiert … nur Java & HTML … ein Open Source Projekt (Apache)
  • 5.
  • 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 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. 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.
  • 20. Wicket verwenden < dependency > < groupId > org.apache.wicket </ groupId > < artifactId > wicket </ artifactId > < version > 1.4.6 </ version > </ dependency >
  • 21. Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  • 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.
  • 29.
  • 35.
  • 36.
  • 37.
  • 38. Wird in der web.xml Datei festgelegt
  • 39. Grundsätzlich: Konfiguration über die API anstatt in XML Dokumenten
  • 40.
  • 46.
  • 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.
  • 59.
  • 60. in der Open Source Szene
  • 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. 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. 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. 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.
  • 66.
  • 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 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.
  • 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 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.
  • 83.
  • 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. Agenda Was ist Wicket Wicket Konzepte Eine Wicket Anwendung Testen Fragen
  • 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. 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.
  • 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. Das erste Hello, World! DEMO
  • 95. Fragen? Fragen & Antworten
  • 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 :)