Ein Blick unter die Haube

Wicket 6

Jochen Mader

Gerade mal ein Jahr nach Wicket 1.5 erscheint mit 6.0 ein neues Major-Release des beliebten Webframeworks. Neben zahlreichen Änderungen im Bereich der Ressourcen-Verwaltung und dem Umbau des Ajax-Layers gibt es einige interessante Neuerungen und Detailverbesserungen. All dies und mehr wird im Folgenden genauer betrachtet.

Ich arbeite schon sehr lange mit Webframeworks. Allerdings nie lange mit demselben. Das änderte sich erst, als ich auf mein erstes Wicket-Projekt kam. Seit mittlerweile drei Jahren arbeite ich, bis auf wenige Abstecher in fremde Gefilde, kontinuierlich damit. Seine konsequent komponenten- und objektorientierten Prinzipien haben mir den Spaß an einem Bereich der Softwareentwicklung zurückgegeben, den ich durch die Arbeit mit seinen Vorfahren und Zeitgenossen verloren hatte.

Mit Spannung habe ich deshalb die Entwicklung von Wicket 6 [1] verfolgt. Besonders beeindruckt hat mich der fast schon sprichwörtliche Pragmatismus im Wicket-Projekt. Ein gutes Beispiel hierfür ist, dass die Ajax-Eigenentwicklung durch eine JQuery-Lösung ersetzt wurde, ganz getreu dem Prinzip „Warum sollten wir etwas selbst entwickeln, was andere bereits besser machen?“. Es hat sich aber noch viel mehr getan. Im Folgenden möchte ich auf die verschiedenen Änderungen und ihre Auswirkungen eingehen. Der Artikel ist dabei grob in drei Teile unterteilt:

  • Änderungen im Wicket-Kern (Ajax, Ressourcen etc.)
  • Erweiterungen an den optionalen Modulen
  • experimentelle Module
JQuery

Der Pflegeaufwand einer eigenen Ajax-Implementierung hat über die letzten Releases hinweg derart zugenommen, dass eine Neubewertung fällig wurde. Mit Blick auf die ständig wachsenden Anforderungen und die vielen Unterschiede zwischen den Browser-Plattformen wurde schnell klar, dass der beste Ansatz der Umstieg auf eine der führenden JavaScript-Bibliotheken ist.

Nach einigen Diskussionen hat man sich dann für JQuery entschieden, wollte aber gleichzeitig die Tür für Alternativen offen halten. Für die Zukunft wollte man die Nutzung anderer Ajax-Implementierungen in Wicket deutlich einfacher machen.

Bei der Umstellung wurde deshalb das API der bisherigen Ajax-Eigenimplementierung erhalten und angepasst. Es dient nun als Schnittstelle zwischen dem Browser und der eigentlichen Ajax-Bibliothek. Für den Einsatz von Dojo, YUI und Co. wurden die Hürden so weit wie möglich gesenkt. Über IJavaScriptLibrarySettings#setWicketEventReference und IJavaScriptLibrarySettings#setWicketAjaxReference können JavaScript-Ressourcen mit alternativen Implementierungen registriert werden. Bleibt „nur noch“ der Aufwand, das Wicket-JavaScript-API zu implementieren.

Der Großteil der Entwickler wird wohl bei JQuery bleiben. Wegen der schnelllebigen Natur von JQuery kann es aber trotzdem manchmal nötig sein, eine eigene Version einpflegen zu können. Auch daran haben die Wicket-Entwickler gedacht und bieten mit IJavaScriptLibrarySettings#setJQueryReference eine schnelle Möglichkeit, die bestehende Version durch eine andere zu ersetzen.

Event-Registration

Mit dem Refactoring der Ajax-Integration wurde auch die Behandlung von JavaScript-Events deutlich verbessert. Bisher wurden diese direkt an den jeweiligen Tags hinterlegt, was zu folgendem Markup führte:

<a id=“testLink“ onclick=“wicketAjaxGet(‚http://<Wicket-Link>‘)“>Link</a>

Mit Wicket 6 hat man diesen Mechanismus komplett auf Event-Registration umgestellt. Dabei wird die Zuweisung von Funktionalität an die entsprechenden Handler am Anfang der Seite durchgeführt. Listing 1 zeigt, wie dieser Mechanismus funktioniert.

Listing 1
 
 

In dem Beispiel wird, sobald der DOM-Tree fertig aufgebaut ist, dem Link mit der ID testLink ein entsprechender Wicket-Get-Aufruf zugeordnet. Das daraus resultierende Markup für den Link reduziert sich damit zu:

<a id=“testLink“>Link</a>

Die Eleganz dieser Lösung besteht zum einen darin, dass das Markup deutlich verkürzt wird und zum anderen in dem Umstand, dass alle Registrationen an einer zentralen Stelle stattfinden. Somit wird eine deutlich höhere Lesbarkeit des HTML-Markups erreicht.


Themen der folgenden Seiten:

  • updateAjaxAttributes und IAjaxCallListener
  • HeaderItems und Ressource-Abhängigkeiten
  • Ressourcen
  • Feedback Messages
  • Formulare
  • Servlet 3
  • web.xml vs @Servlet und Co.
  • The Spring Way
  • The JEE6 Way
  • CDI
  • Experimentelles
  • WebSockets
  • Zusammenfassung
Geschrieben von
Jochen Mader
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.