Blog

Lesbare Url's in Wicket - Eine Einführung in wicketstuff-annotation

Jeroen van Wilgenburg

Aktualisiert Oktober 23, 2025
5 Minuten

Haben Sie schon einmal versucht, eine von Wicket generierte Url auszusprechen? Das ist eine ziemlich mühsame Arbeit, und oft möchten die Endbenutzer verständliche URLs haben (selbst wenn die URL keine Bedeutung hat). Es ist ganz einfach, normale Url's in Wicket zu erhalten. In diesem Artikel zeige ich Ihnen mehrere Lösungen, die ersten beiden mit einfachem Wicket und die letzte Lösung mit wicketstuff-annotations.

Vor kurzem habe ich einen Artikel mit dem Titel "Wicket Creating RESTful URLs" gelesen. Es ist ein nützlicher Artikel, aber es fühlte sich trotzdem nicht richtig an. Es sollte einfacher sein und an der richtigen Stelle stehen.In Stripes zum Beispiel können Sie einfach @UrlBinding("/helloWorld.action") auf Ihre ActionBean setzen und es funktioniert. Das ist es, was ich will!Nach einiger Suche bin ich auf wicketstuff-annotation gestoßen. Wicketstuff bietet eine große Anzahl von Ergänzungen zu Wicket, um es noch besser zu machen. wicketstuff-annotation ist ein kleiner Teil davon.

Ganz von vorne anfangen

Um wsa (Wicketstuff annotation) zu demonstrieren, werde ich Maven 2 eine einfache Wicket-Anwendung von Grund auf generieren lassen. Um diese Anwendung zu erstellen, besuchen Sie die Apache Quickstart Seite

wicketstuff url

Führen Sie diese Anweisung in der Befehlszeile aus und Sie haben innerhalb von Sekunden eine funktionierende Wicket-Anwendung. Fügen Sie einen Link zu HomePage.html hinzu, damit Sie sehen können, welche URLs Wicket generiert und wie Sie diese verbessern können:

<wicket:link>
<a href="HomePage2.html?page=133&paragraph=25">
Link zum Wicket-Dokument HomePage2.html
</a>
</wicket:link>

Erstellen Sie eine Kopie von HomePage.java und HomePage.html und nennen Sie die Dateien HomePage2.java und HomePage2.html. Ändern Sie die href zu HomePage2.html in der Datei HomePage2.html in HomePage.html. Wenn Sie die Anwendung erneut bereitstellen, sehen Sie die unlesbare URL, von der ich vorhin gesprochen habe:

https://xebia.com/blog:8080
/wicketstuff-test/?wicket:bookmarkablePage=:com.xebia.HomePage2&paragraph=25&page=133

Ich habe die Seite mit den Parametern und den Absatz hinzugefügt, um zu zeigen, dass auch diese Parameter besser lesbar gemacht werden können. Eine weitere schlechte Sache ist, dass wir unsere Paketstruktur offenlegen. Den Endbenutzern ist es egal, in welchem Paket sich die Seite befindet und Sie sollten potenziellen Hackern keine Informationen geben.

Die einfache Wicket-Lösung

Die einfachste Lösung ist die Zuordnung eines Pakets zu einem Pfad. Wir können zum Beispiel das gesamte Paket com.xebia auf xebia.com/blog:8080/wicketstuff-test/web zuordnen. Leider können wir nicht auf das Stammverzeichnis (/) der Anwendung zugreifen. Um ein Paket einzubinden, fügen Sie die folgende Zeile in den Konstruktor von WicketApplication ein:

mount("web",PackageName.forClass(HomePage.class));

Die hässliche Url sieht jetzt viel besser aus:

xebia.com/blog:8080/wicketstuff-test/web/HomePage2/paragraph/25/page/133/

Auch die Parameter page und paragraph wurden verbessert. Angenommen, Sie möchten den Namen Ihrer WebPage (HomePage2) nicht preisgeben und auch die Parameternamen ausblenden. Dies können Sie erreichen, indem Sie eine MixedParamurlCodingStrategy in die Anwendung einbauen:

public WicketApplication() {
  String[] parameterNames = new String[] {"Seite", "Absatz"};
  MixedParamUrlCodingStrategy mixedParamUrlCodingStrategy =
new MixedParamUrlCodingStrategy(
  "h2", HomePage2.class, parameterNames);
  mount(mixedParamUrlCodingStrategy);
}

Das Problem bei dieser Lösung ist, dass Sie alle Parameter übergeben und alle Klassendateien in der Anwendungsdatei ablegen müssen. Die URL-Struktur und die Seitenparameter beziehen sich auf die Seite, nicht auf die Anwendung, daher sollten sie sich auf der WebPage befinden. Aber das Ergebnis ist eine sehr schöne Url, ohne dass Sie eine zusätzliche Abhängigkeit zu wsa hinzufügen müssen:

https://xebia.com/blog:8080/wicketstuff-test/h2/133/25/

Die Wicketstuff Annotation Lösung

Um die wsa-Unterstützung zu Ihrer Anwendung hinzuzufügen, müssen Sie eine Abhängigkeit zu Ihrer pom.xml hinzufügen:

<Abhängigkeit>
     <groupId>org.wicketstuff</groupId>
     <artifactId>wicketstuff-annotation</artifactId>
     <Version>1.1</version>
 </dependency>

Der nächste Schritt besteht darin, die alte Lösung aus dem Konstruktor von WicketApplication zu löschen. Fügen Sie die folgende Zeile hinzu: new AnnotatedMountScanner().scanPackage("com.xebia").mount(this); Diese Zeile durchsucht das Paket com.xebia nach Anmerkungen zum Einhängen von URLs. In einer Produktionsumgebung ist es wahrscheinlich klüger, dies auf das Paket zu beschränken, in dem sich alle WebPage-Klassen befinden (d.h. com.xebia.web). Jetzt können wir endlich Anmerkungen zu HomePage2 hinzufügen:

@MountPath(Pfad = "h2")
@MountMixedParam(parameterNames = { "Seite", "Absatz" })
public class HomePage2 extends WebPage {
...
}

Das funktioniert genauso wie vorher, nur an der richtigen Stelle. Es gibt mehrere Varianten der zweiten Anmerkung:

@MountPath (und keine zweite Annotation) https://xebia.com/blog:8080/wicketstuff-test/h2/paragraph/25/page/133/ @MountPath und @MountMixedParam https://xebia.com/blog:8080/wicketstuff-test/h2/133/25/ @MountPath und @MountQueryString https://xebia.com/blog:8080/wicketstuff-test/h2?paragraph=25&page=133

Es gibt verschiedene andere Kodierungsstrategien, die Sie verwenden können. In der wsa javadoc gibt es nicht viele Informationen. Wenn Sie mehr wissen möchten, sollten Sie die Wicket-Javadocs konsultieren und nach dem Paket org.wicket.request.target.coding suchen. Die hier verwendeten Namen sind ähnlich wie die für wsa.

Fazit

Die Wicketstuff-Anmerkung ist eine sehr schöne Ergänzung zu Wicket. Sie hilft Ihnen, Ihre Url's an der richtigen Stelle zu kodieren. Der einzige kleine Nachteil ist die Abhängigkeit von Spring Core. Eine so kleine Bibliothek wie wsa sollte auch ohne Spring funktionieren (nicht, dass Spring etwas Schlechtes wäre, ich mag nur nicht viele Abhängigkeiten). Seien Sie also nicht beunruhigt, wenn Sie ein Spring jar zwischen Ihren Bibliotheken auftauchen sehen. Beachten Sie auch, dass die Lösung mount(path, packageName) die sicherste ist, wenn Sie die Paketstruktur nicht offenlegen wollen. Wenn Sie vergessen, Anmerkungen hinzuzufügen, landen Sie bei den hässlichen URLs und geben die Paketstruktur trotzdem preis. Ich habe versucht, mehrere Einhängepunkte hinzuzufügen, aber das war nicht möglich.

Quellen

Wicketstuff Annotation Wicketerstellen restful urls url coding strategies

Verfasst von

Jeroen van Wilgenburg

Contact

Let’s discuss how we can support your journey.