Seiten und Verlinkung zwischen Seiten
Vererbung von Seiten
- Wicket-Seiten können vererbt werden.
- Das HTML-Markup wird dabei mittels
<wicket:child>und<wicket:extend>sowie<wicket:head>ineinander eingesetzt. - Ideal für Wiederverwendung eines gemeinsamen Seitenrahmens: Die abgeleitete Klasse befüllt den durch die Basisklasse vorgegebenen Rahmen mit Inhalten.
- Achtung: Basis-Seiten sollten Konstruktoren analog
WebPagedeklarieren, damit Unterklassen diese Konstruktoren aufrufen können.
wicket:child / wicket:extend
- Inhalte in
<wicket:head>werden im<head>-Bereich der Basisseite ergänzt. - Inhalte in
<wicket:extend>werden in den<wicket:child>-Bereich der Basisseite eingesetzt.
Statische Verlinkung auf Seiten: BookmarkablePageLink
-
Mit
BookmarkablePageLinkkann statisch auf Seiten verlinkt werden:add(new BookmarkablePageLink("someLink", SomePage.class));
-
BookmarkablePageLinkgeneriert statische URLs, auf die Lesezeichen gesetzt werden können:http://localhost:8080/?wicket:bookmarkablePage=:de.ralfebert.SomePage
-
Mit
ExternalLinkkann auf externe Seiten verlinkt werden:add(new ExternalLink("searchLink", "http://www.google.de/"));
Automatische Verlinkung mit wicket:link
-
<a href="...">-Links innerhalb eines<wicket:link>-Blocks werden von Wicket automatisch mit den entsprechenden Seiten verlinkt:<wicket:link> <a href="SomePage.html">Some page</a> <a href="../SomeOtherPage.html">Some other page</a> </wicket:link>
-
Ergebnis:
<a href="?wicket:bookmarkablePage=:de.someproject.somepkg.SomePage">Some page</a> <a href="?wicket:bookmarkablePage=:de.someproject.SomeOtherPage">Some other page</a>
Auf Seiten-Instanzen verlinken: Link
-
Seiten-Objekte können bei Bedarf erzeugt und als
ResponsePagegesetzt werden. Dies ist vor allem sinnvoll, wenn die Seite abhängig vom Request initialisiert werden muss:add(new Link("someLink") { @Override public void onClick() { // Weiterleitung zu SomePage setResponsePage(new SomePage()); } });
-
Dies führt zu dynamischen Links, die nur für die jeweilige Session gültig sind und daher nicht per Lesezeichen gespeichert werden können, z.B.:
http://localhost:8080/?wicket:interface=:1::::
Mit PageParameters auf Seiten verlinken
-
Seiten mit Parametern (z.B. ID des zu editierenden Datensatzes bei einer Editierseite) können mit
PageParametersverlinkt werden:PageParameters params = new PageParameters(); params.put("id", 5); add(new BookmarkablePageLink("someLink", SomeEditPage.class, params));
-
Die Übergabe der Parameter erfolgt im Konstruktor der Seite:
public SomeEditPage(PageParameters parameters) { super(parameters); int id = parameters.getInt("id"); }
-
Dies führt ebenfalls zu Bookmark-fähigen URLs:
http://localhost:8080/?wicket:bookmarkablePage=:de.ralfebert.SomeEditPage&id=5
Abarbeitung eines Requests
- HTTP Requests für die Web-Anwendung werden von
WicketFilterentgegengenommen. - Der HTTP Request wird dekodiert.
- Das Ziel der Anfrage wird bestimmt, ggf. wird eine Seite erzeugt oder eine bereits in der Session vorhandene Seite geholt.
- Zu verarbeitende Events werden an das Seitenobjekt bzw. deren Komponenten zugestellt.
- Die Seite wird unter Verwendung des Seiten- und Komponenten-Markups gerendert und in den HTTP-Response geschrieben.
Umgang mit Generics
- Die meisten Wicket-Komponenten haben ein generisches Argument für den Modelltyp (z.B.
Link<T>). - Fehlt die Typangabe, warnt der Java Compiler (
unchecked operationbzw.raw type used). - Wird kein Modelltyp benötigt, kann
<Object>oder<Void>verwendet werden. - Alternativ können die Warnungen mit der Annotation
@SuppressWarnings("unchecked")lokal unterdrückt werden. - Alternativ können die Warnungen in den Projekteinstellungen unter
Java Compiler > Errors/Warnings > Generic types > Unchecked generic type operationsowieUsage of a raw typedeaktiviert werden.
Weitere Informationen
- Consistent layout using markup inheritance: http://www.javalobby.org/java/forums/t69357.html
- Wicket’s XHTML tags: http://cwiki.apache.org/WICKET/wickets-xhtml-tags.html


Hallo Ralf,
wie lassen sich externe Links in einer ListView als HTML-Links abbilden und nicht als JavaScript?
Viele Grüße
Gregor