Mein zweiter Vortrag auf der JAX 2008 ging rund um das Webframework Wicket.
Warum schon wieder ein neues Webframework ?
Diese Frage ist mit Sicherheit eine berechtigte Frage. Darum soll diese auch im Zusammenhang mit Wicket (wird unter der Apache License Version 2.0 zur Verfügung gestellt) gestellt werden. Ein Grund könnte sein, dass man mit seinem Webframework nicht zufrieden ist. Ein anderer Grund könnte aber auch das Gegenteil sein. Alle Anforderungen können mit dem eingesetzten Framework abgedeckt werden und durch jedes neue Framework kann man sich einfach aufs neue überzeugen, dass dies auch weiterhin so ist.
Was kann es?
- Komponentenorientiertes Webframework (nahe bei Tapestry und Echo)
- Programmierung in Java und HTML (Komponenten)
- AJAX ohne selbstimplementiertes JavaScript (wie ZK)
- Unterstützung von verschachtelten Formularen
- Keine speziellen Konfigurationsdateien (XML free, bis auf web.xml)
- Eingebaute Testunterstützung
Etwas Architektur

Der zentrale Einstiegspunkt in eine Wicketapplikation ist der WicketFilter. Dieser leitet die Anfrage an die entsprechende Applikation weiter. Durch den einkommenden Request wird ein Requestzyklus gestartet.

public static void main(String[] args) = Application
Der zentrale Einstiegspunkt (kann mit der main-Methode bei Standalone-Javaprogrammen verglichen werden) ist die Klasse org.apache.wicket.Application (oder eine Ableitung davon). Diese Klasse ist u.a. für die Konfiguration (innerhalb der Methode init) zuständig. Die Einstellungen sind gemäß dem Prinzip Seperation of Concerns in einzelne Interfaces aufgeteilt (z.B. DebugSettings, ExceptionSettings oder MarkupSettings). Die aktuellen Konfigurationsinstanzen können dabei innerhalb der Applikationsklasse über Methoden (z.B. getExceptionSettings) geholt werden. Zusätzlich liefert die Applikationsklasse die Einstiegsseite (Homepage) zurück.
Seiten und Komponenten
Eine Seite innerhalb von Wicket besteht immer aus einer Javaklasse und einer HTML-Seite. Innerhalb der HTML-Seite werden die Tags durch einen Wicket-Namespace direkt am jeweiligen HTML-Tag erweitert (z.B. wicket:id). Die Elemente werden dann über IDs im Quellcode adressiert und können hier auch manipuliert werden. Auch die Ausprogrammierung der Events geschieht innerhalb des Javacodes. Komponenten in Wicket bestehen wie Seiten auch aus einer Javaklasse und einer HTML-Seite. Die einfachste Möglichkeit, eine eigene Komponente zu schreiben, besteht in der Ableitung einer vorhandenen Komponente (z.B. von org.apache.wicket.markup.html.panel.Panel).
Verhalten hinzufügen
Ein interessantes Konzept von Wicket sind die Behaviours. Damit ist es möglich Komponenten zu erweitern, z.B. kann so einer vorhandenen Komponente nachträglich die AJAX-Fähigkeit (wie automatisches Update nach n-Sekunden) hinzugefügt werden. D.h. Behaviours sind die Plugins für die Komponenten.
Testmöglichkeit bereits integriert
Die Frage nach einer Testmöglichkeit sollte von neuen Frameworks immer gleich mitbeantwortet werden. Wicket liefert für diesen Fall den WicketTester mit. Damit ist es möglich, die Seiten ohne einen Webcontainer zu testen. Für den Ablauf des WicketTester ist es angebracht, diesen innerhalb von TestCases (z.B. mit JUnit oder TestNG) zu verwenden.
Fazit
Wicket ist ein erfrischend neues Framework für die Webentwicklung. Die Nähe zu Java mag vielen Javaentwicklern gefallen. Die erste Anwendung gelingt mit den Beschreibungen auf der Wicketseite sehr schnell. Ein Blick lohnt sich allemal.