22. Januar 2010
Ajax-Oberflächen mit Apache Wicket
In vielen Situationen benötigt man zwar eine AJAX-Oberfläche, möchte allerdings nicht die üblichen GUI-Klimmzüge in Kauf nehmen à la "ich arbeite mich zwei Wochen in ein neues AJAX-Framework ein". Gerade bei Projekten, die den Fokus stärker auf den Server legen und das GUI beispielsweise nur verwenden, um den aktuellen Status einer Datenmigration zu visualisieren, besteht meistens der Wunsch, ein einfaches Werkzeug für die Oberfläche zu erhalten. Am besten im guten alten HTML-Stil – denn HTML "programmieren" kann eigentlich jeder...
Das Open Source Framework Apache Wicket kann genau in diesem Bereich punkten, denn durch den Einsatz von Wicket können Java-Inhalte ganz einfach nach vorne in die Oberfläche geholt werden. Ein einfaches Beispiel verdeutlicht das Konzept. Auf der Serverseite werden die anzuzeigenden GUI-Elemente samt zugehöriger Inhalte in Java definiert (HelloWorld.java). Prinzipiell erinnert das Konzept stark an GWT.
public class HelloWorld extends WebPage {public HelloWorld() {add(new Label("message", "Hello World!"));}}
Der nächste Schritt unterscheidet sich jedoch maßgeblich von GWT. Die Layout-Definition wird nicht in HTML/JavaScript übersetzt. Stattdessen wird ein HTML-GUI erstellt, das die Label-Komponente anzeigt (HelloWorld.html).
<html><body><span wicket:id="message" id="message">Message goes here</span></body></html>
Ein Wicket wird in die HTML-Oberfläche durch einen wicket-Tag integriert. An der Stelle des wicket-Tags soll später der Label-Inhalt der Java-Klasse angezeigt werden. Das Binding zwischen dem Wert aus der Java-Klasse und dem Wicket im GUI wird über eine ID (message) erstellt. Die Kommunikation zwischen Oberfläche und Java-Klasse wird durch ein entsprechendes Filter-Mapping in der web.xml definiert. Das vollständige „HalloWelt“-Beispiel inklusive Filter Mapping ist im Wicket-Beispielbereich verfügbar.
Für alle Entwickler, die dann doch einen kleinen Akzent auf die Oberfläche legen möchten statt ein Tabellenskelett mit Java-Werten zu erzeugen, gibt es Plug-ins. wiQuery bietet beispielsweise die Möglichkeit jQuery in eine Wicket-Anwendung zu integrieren.
Zusammenfassend kann gesagt werden, dass Wicket in puncto GUI-Resultate vielleicht nicht unbedingt nobelpreisverdächtig ist – das Konzept hinter den Oberflächen ist jedoch extrem einfach und ermöglicht ein Binding zwischen Client und Java-Welt in nur wenigen Minuten. Plug-in-Erweiterungen geben Wicket einen zusätzlichen Feinschliff und versetzen Entwickler in die Lage, robuste AJAX-Anwendungen mit Java-Backend zu erstellen. Wer Wicket nicht kennt und vor dem Problem steht, Java-Inhalte an den Client zu schicken, der sollte auf jeden Fall mal einen Blick auf Wicket werfen!
Florian Müller arbeitet für Comit Schweiz und betreut dort den Bereich User-Interface-Technologien. Darüber hinaus betreibt Florian die Plattform richability, wo regelmäßig über neueste Erkenntnisse aus dem Bereich Frontend-Technologien und -Entwicklung informiert wird. Zu erreichen ist Florian via Florian.Mueller (at) richability.com.
danke für Dein Feeback - Du hast vollkommen Recht, Wicket ist sicherlich kein Framework mit dem man "über Nacht" 1:1 die Kundenanforderungen umsetzt um diese am nächsten Tag zu präsentieren...allerdings gelingt der Start definitiv über Nacht, und wie weit nach diesem Start gegangen werden soll hängt ganz vom Entwickler bzw. den Anforderungen ab.
Tenor des Artikels soll es nicht sein Wicket unter seinem Wert zu verkaufen a la "jeder der Java kann der kann auch Wicket..." sondern viel mehr einen Appetit Anreger zu präsentieren der Lust auf mehr macht - falls das falsch rüber gekommen sein sollte möchte ich dies korrigierend einfließen lassen. Wie tief sich man sich dann in Wicket eingräbt ist jedem selbst überlassen :-)
Viele Grüße - Florian! #zitieren
Das "Java-Inhalte ganz einfach nach vorne in die Oberfläche geholt werden" können, ist zwar richtig. Viel wichtiger uns wesentlicher ist aber, dass mit Wicket leistungsfähige Komponenten gebaut werden können und diese sehr gut wiederverwendet werden können. Allein hier kann sich Wicket schon wesentlich besser positionieren, wie der "Konkurent" JSF.
Mit Wicket ist auch eine schrittweise Migration möglich, durch das sukzessive einfügen von Wicket-IDs.
Pronzipiell können auch beliebige Java-Script-Frameworks verwendet oder eingebunden werden und (wie im Fall jQuery mit dem Framework wiQuery geschehen) als Komponenten angeboten bzw. verwendet werden.
Als Verfechter des ZK-Frameworks mutet dem Autor Wicket eher als wenig leistungsfähig an, weil Wicket (im Gegensatzt zu ZK) nicht out of the box mit hübschen GUI-Komponenten daherkommt. Aber das läßt sich ja wie vom Autor erwähnt lweicht mit wiQuery beheben. Welche Vorteile es bringt, wenn man sich nicht mit einer xml-Syntax auseinantersetzen muss, sondern (endlich wieder) reines Java programmieren darf, wird bei wicket im alltatgseinsatz sehr schnell deutlich. Daher kann ich nur jedem empfehlen, der im Web-Umfeld tätig ist und Java-Kenntnisse hat sich mit Wicket zu beschäftigen. Ein JSF-Entwickler der auf Wicket umgestiegen ist, wird vollig fassungslos sein, weil er nicht verstehen kann, wie er jemals mit JSF programmieren konnte.
Wicket hält zwar den Status am Server, es exitieren aber sehr leistungsfähige Möglichkeiten, das der Footprint nicht zu groß wird (DetachableModels).
Für die Skalierbarkeit und zum Clusternig, gibt es auch sehr leistungsfähige Ansätze (u.a. auch eine Integration von Terracotta)
Für ganz einfache Webapplications eignet sich Wicket ebenso, wie für
mittlere bis extrem große und komplexe Anwendungen. #zitieren
































