www.wikidata.de-de.nina.az
Apache Wicket ist ein komponentenbasiertes Webframework fur die Programmiersprache Java Es ist ein Open Source Projekt und heute unter Version 2 0 der Apache Lizenz verfugbar Apache WicketBasisdatenEntwickler Apache Software FoundationErscheinungsjahr 7 Juni 2005 1 Aktuelle Version 9 15 2 18 September 2023 Betriebssystem plattformubergreifendProgrammiersprache Java 3 Kategorie WebframeworkLizenz Apache Lizenzwicket apache org Inhaltsverzeichnis 1 Ziel 2 Funktionalitat 3 Geschichte 4 Lebenszyklus einer Wicket Komponente 5 Beispiel 5 1 Application Klasse 5 2 Web Page Java 5 3 Web Page HTML 5 4 web xml 6 Kritik 7 Versionen 8 Literatur 9 Weblinks 10 EinzelnachweiseZiel BearbeitenWicket verfolgt das Ziel eine komfortable leistungsfahige und flexible Moglichkeit zur Erstellung von Webanwendungen fur erfahrene Java Programmierer bereitzustellen wodurch es ermoglicht werden soll komplexen Anforderungen gerecht zu werden und eine hohe Produktivitat zu erlangen Durch den komponentenorientierten Ansatz von Wicket ist es sehr leicht moglich eigene wiederverwendbare Komponenten zu entwickeln Wicket zwingt den Programmierer im Gegensatz zu vielen anderen Frameworks konsequent objektorientiert zu programmieren Es wird grosser Wert auf Wiederverwendbarkeit gelegt Funktionalitat BearbeitenEigenschaften von Wicket sind Trennung von Logik Java und Darstellung HTML und CSS Jede Komponente kann ihre Daten in ein zugehoriges Datenmodell speichern Automatische Zustandsverwaltung Bis auf web xml sind keine XML Konfigurationsdateien notig Fur die Arbeit mit Wicket sind ausschliesslich Java und X HTML Kenntnisse erforderlich Die Ubernahme der Benutzereingaben erfolgt mit Java Dabei wird durch Java zuerst gepruft ob eine Eingabe erforderlich ist anschliessend werden die Daten in den entsprechenden Datentyp umgewandelt Abschliessend werden die Daten auf Zulassigkeit Validierung gepruft Diese drei Schritte konnen komponentenweise oder gemeinsam fur ein Web Formular uber ein Fehlerbehandlungssystem abgefangen werden Werden alle Schritte fehlerfrei durchlaufen so werden die Daten im Datenmodell abgelegt Ajax ist ohne JavaScript Kenntnisse moglich Dafur gibt es einzelne Klassen die Ajax Funktionalitat bereitstellen Allen Komponenten kann auch nachtraglich Ajax Funktionalitat uber sogenannte Behaviors hinzugefugt werden So gibt es unter anderem die Klasse AjaxEventBehavior zum Reagieren auf ein bestimmtes JavaScript Ereignis oder die Klasse AbstractSelfUpdatingTimerBehavior zum automatischen Aktualisieren einzelner Komponenten in bestimmten Zeitintervallen Mit sogenannten Panels kann man Teile einer Seite andern oder austauschen bzw die Seite aus verschiedenen Komponenten aufbauen Es ist sehr leicht moglich wiederverwendbare Komponenten zu entwickeln und diese ggf mit Ajax Funktionalitat anzureichern Alle erforderlichen Dateien einer Komponente Java und HTML Datei plus ggf Icon CSS oder JavaScript Dateien konnen zur besseren Wiederverwendbarkeit in eine jar Datei gepackt werden Sogenannte Ressourcen ermoglichen es dynamisch generierte Daten einzubinden z B PDF Daten oder auf statische Daten JavaScript CSS Dateien zuzugreifen Der Aufbau einer URL kann uber URLCodingStrategies bestimmt werden Leichte Integrierbarkeit von externen JavaScript Bibliotheken Schrittweise Migration von HTML Seiten nach Wicket ist moglich Ab Version 1 5 konnen alle Komponenten sehr einfach Events miteinander austauschen WicketTester ermoglicht den UnitTest einzelner Seiten und auch den Ablauf uber mehrere Seiten Konzeptionell ist Wicket am ehesten mit Apache Tapestry vergleichbar konkurriert aber in erster Linie mit JavaServer Faces und Google Web Toolkit Geschichte BearbeitenDie Architektur von Wicket wurde 2004 von Jonathan Locke und Miko Matsumura entworfen und war bis zur Version 1 2 auf sourceforge org verfugbar Spater wurde das Framework dann unter der Apache Lizenz als Open Source Projekt verfugbar Eine Gruppe von Programmierern der niederlandischen Firma Topicus die von Eelco Hillenius Martijn Dashorst und Johan Compagner geleitet wurden bilden neben einigen anderen bis heute das Kernteam Wicket ist als Open Source Projekt unter der Apache Lizenz Version 2 0 verfugbar Ab der Version 6 0 0 setzt Wicket zwingend JDK 6 oder hoher voraus Daruber hinaus wird nun von Wicket im Hintergrund jQuery als Ajax Implementierung verwendet Mit Wicket 7 x wird zwingend Java 7 und Servlet Version 3 x Container voraus gesetzt Seit Wicket 8 x besteht eine vollstandige Unterstutzung von Java 8 Lebenszyklus einer Wicket Komponente BearbeitenJede Wicket Komponente durchlauft einen bestimmten Lebenszyklus Dabei gibt es drei Hauptphasen Initialisierung Rendering RemovingDie einzelnen Methoden konnen jeweils bei Bedarf uberschrieben werden Phase Beteiligte Methoden BeschreibungInitialisierung b onInitialize b Wird am Anfang des Lebenszyklus ausgefuhrt Diese Methode eignet sich als spezieller Konstruktor fur die Initialisierung aller Komponenten insbesondere bei Klassen die von WebPage erben Beim Uberschreiben muss die Methode super onInitialize als erstes aufgerufen werden protected void onInitialize super onInitialize Rendering onConfigure Diese Methode wird aufgerufen bevor das Rendering startet Insofern ist das die ideale Stelle um den Status von Komponenten zu steuern wie z B Sichtbarkeit oder Aktivierung Da die Methoden isVisible oder isEnabled wahrend des Renderns einer Page oder Komponente mehrfach aufgerufen werden ist es dringend zu empfehlen diese Methoden nicht direkt sondern stattdessen die Methode onConfigure zu benutzen um den Status zu steuern Ist die Sichtbarkeit einer Komponente auf false so wird die nachfolgende Methode onBeforeRender gar nicht mehr aufgerufen onBeforeRender Diese Methode wird aufgerufen bevor das Rendering beginnt Insofern ist es die letzte Chance die Komponentenhierarchie zu andern oder Komponenten hinzuzufugen oder zu loschen Wird diese Methode uberschrieben so muss der Aufruf von super onBeforeRender ganz am Schluss erfolgen da hierbei das Rendering aller nachfolgenden Komponenten angestossen wird protected void onBeforeRender super onBeforeRender onRenderonComponentTag hier kann man beliebige Anderungen am Element Tag vornehmen Es kann sowohl die Art der Komponente getauscht als auch dessen Style verandert werden Auch hier darf der Aufruf der Methode der Super Klasse nicht vergessen werden protected void onComponentTag ComponentTag tag super onComponentTag tag onComponentTagBody Diese Methode kann man uberschreiben wenn man den Inhalt einer Komponente verandern will In Kombination mit der Methode replaceComponentTagBody kann man einen veranderten Inhalt rendern Will man das Originalverhalten der Komponenten haben dann muss man die Methode der Super Klasse aufrufen public void onComponentTagBody MarkupStream markupStream ComponentTag tag if isEnabled replaceComponentTagBody markupStream tag diese Komponente ist deaktiviert else super onComponentTagBody markupStream tag onAfterRenderChildrenonAfterRenderRemoving onRemove Die Methode kann benutzt werden um bestimmte Ressourcen die die Komponente braucht wieder freizugeben Beispiel BearbeitenEin einfaches Beispiel besteht aus vier Dateien eine Application Klasse die als erstes aufgerufen wird eine Java Datei die die Seite darstellt eine zur Java Datei zugehorige HTML Datei und die Datei web xml den Deployment Descriptor der Web Application fur die Konfiguration welche Klasse die Applications Klasse ist Application Klasse Bearbeiten Die Application Klasse dient als zentraler Einstiegspunkt fur die Webapplikation Hier konnen verschiedene Einstellungen vorgenommen werden die fur die ganze Applikation gultig sind Unter anderem wird hier die Startseite festgelegt package com myapp wicket import org apache wicket protocol http WebApplication public class Application extends WebApplication public Class getHomePage return OnePage class Web Page Java Bearbeiten Jede Seite Page wird durch eine Java Klasse und eine zugehorige gleichnamige HTML Datei reprasentiert Alle Komponenten der Klasse werden hier definiert Alle Komponenten die in der HTML Datei eine wicket id haben werden als Komponenten hinzugefugt b OnePage java b package com myapp wicket import org apache wicket ajax AjaxEventBehavior import org apache wicket ajax AjaxRequestTarget import org apache wicket markup html WebPage import org apache wicket markup html basic Label import org apache wicket markup html form Button import org apache wicket markup html form Form import org apache wicket markup html form TextField import org apache wicket model Model public class OnePage extends WebPage public OnePage final Label label new Label message new Model label setOutputMarkupId true Form form new Form form final TextField field new TextField field new Model field setOutputMarkupId true form add field final Button but1 new Button button1 Override public void onSubmit String value String field getModelObject label setModelObject Normal Request value field setModelObject setResponsePage AnotherPage class but1 setOutputMarkupId true form add but1 final Button but2 new Button button2 new Model Button deaktivieren but2 add new AjaxEventBehavior onclick Override protected void onEvent AjaxRequestTarget target but1 setEnabled but1 isEnabled if but1 isEnabled but2 setModelObject Button deaktivieren else but2 setModelObject Button aktivieren target addComponent but2 target addComponent but1 form add but2 add form add label Web Page HTML Bearbeiten Fur jede Komponente die dynamisch verandert werden soll muss ein Attribut wicket id angelegt werden b OnePage html b lt xml version 1 0 encoding UTF 8 gt lt DOCTYPE html PUBLIC W3C DTD XHTML 1 0 Strict EN http www w3 org TR xhtml1 DTD xhtml1 strict dtd gt lt html xmlns wicket gt lt head gt lt title gt Echo Application lt title gt lt head gt lt body gt lt h1 gt Echo example lt h1 gt lt form wicket id form gt lt input wicket id field type text gt lt input wicket id button1 type submit value Button gt lt input wicket id button2 type button value Button deaktivieren gt lt form gt lt p wicket id message gt Fun Fun Fun lt p gt lt body gt lt html gt web xml Bearbeiten Die Application wird lediglich uber die folgende b web xml b Datei in den Servlet Container als Web Applikation eingebunden lt xml version 1 0 encoding UTF 8 gt lt web app version 2 5 xmlns http java sun com xml ns javaee xmlns xsi http www w3 org 2001 XMLSchema instance xsi schemaLocation http java sun com xml ns javaee http java sun com xml ns javaee web app 2 5 xsd gt lt filter gt lt filter name gt WicketApplication lt filter name gt lt filter class gt org apache wicket protocol http WicketFilter lt filter class gt lt init param gt lt param name gt applicationClassName lt param name gt lt param value gt com myapp wicket Application lt param value gt lt init param gt lt filter gt lt filter mapping gt lt filter name gt WicketApplication lt filter name gt lt url pattern gt lt url pattern gt lt filter mapping gt lt web app gt Kritik BearbeitenWicket ist sehr leistungsfahig wenn es darum geht komplexe Anforderungen an die Webapplikation zu erfullen Geschaftslogik kann vollstandig in Java programmiert werden ohne sich uber die Besonderheiten einer Webanwendung Gedanken machen zu mussen Der Status der Bearbeitung innerhalb einer Session wird jedoch von Wicket serverseitig gefuhrt wodurch der Entwickler einer Wicketanwendung gezielt das Ressourcenproblem vieler gleichzeitiger Benutzer losen muss Im Gegensatz dazu werden oft bei JavaScript basierten Webframeworks der Status clientseitig gehalten und nur ggf die Daten vom Server nachgeladen Da in Wicket sehr gut JavaScript oder auch CSS Frameworks eingebunden werden konnen stellt Wicket eine flexible Webentwicklungsplattform dar Versionen BearbeitenWicket hat im Laufe der Zeit eine grosse Entwicklung durchlebt ab Wicket 1 4 gibt es Unterstutzung fur Generische Datentypen Die letzte Version der 4er Reihe ist hier Wicket 1 4 23 mit Wicket 1 5 wurde die API radikal geandert Die letzte Version ist hier Wicket 1 5 10 mit Wicket 6 x wurde die Wicket eigene Ajax Unterstutzung durch jQuery ersetzt Die letzte Version ist Wicket 1 6 20 mit Wicket 7 x setzt Wicket zwingend Java 7 und Servlet Version 3 x Container voraus seit Wicket 8 0 wird Java 8 vollstandig unterstutzt Es wird zusatzlich Servlet 3 1 voraus gesetzt Wicket 9 0 basiert auf Java 11 und nutzt JUnit5 Die interne Klasse Duration wird durch java time Duration aus dem JDK ersetzt Literatur BearbeitenMartijn Dashorst Eelco Hillenius Wicket in Action Manning Greenwich CT 2008 ISBN 978 1 932394 98 6 Michael Mosmann Praxisbuch Wicket Hanser 2009 ISBN 978 3 446 41909 4 Roland Forther Carl Eric Menzel Olaf Siefart Wicket Komponentenbasierte Webanwendungen in Java dpunkt verlag 2009 ISBN 978 3 89864 569 0 S 250 dpunkt de abgerufen am 4 Januar 2010 Igor Vaynberg Apache Wicket Cookbook Packt Publishing 2011 ISBN 978 1 84951 160 5 S 312 englisch Weblinks BearbeitenWicket Website Wiki zum Thema Wicket Migrations Hinweise fur Wicket 1 5 Migrations Hinweise fur Wicket 6 0 Migrations Hinweise fur Wicket 7 0 Website mit Wicket Demos und Wicket Komponenten Wicket Guide Dokumentation zu Wicket die auch Version 6 x abdeckt Vergleich mit Google Web Toolkit englisch siehe auch Google Web Toolkit Vergleich mit Java Server Faces englisch siehe auch JavaServer Faces Einzelnachweise Bearbeiten web archive org wicket apache org projects apache org abgerufen am 8 April 2020 Normdaten Sachbegriff GND 7674275 1 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Apache Wicket amp oldid 234762845