Wicket : déterminer le chemin vers une ressource
En Wicket, tout est tellement automatisé que l’on oublie vite à quel point ses mécanismes nous simplifient la vie !
Besoin de créer un lien ? Il suffit de passer en paramètre de la méthode “setResponsePage” la classe de la page et c’est fait :
-
this.add(new Link(“linkID”) {
-
@Override
-
public void onClick() {
-
this.setResponsePage(MaPage.class);
-
}
-
});
Envie d’insérer une image ? Copiez-la dans le répertoire de l’application, ajoutez une “ResourceReference” puis insérez l’image avec le markup associé et le tour est joué : Wicket se chargera pour vous de retrouver l’image adéquate !
-
ResourceReference image = new ResourceReference(MyClass.class, “myImage.png”);
-
myPage.add(new Image(“imageID”, image));
-
<image src=“” wicket:id=“imageID”/>
Hélas, tout n’est pas Wicket et il faut parfois recourir à d’autres langages comme, par exemple, JavaScript. Dans pareil cas, vous pouvez avoir besoin de connaître “textuellement” l’URL d’une page ou d’une image afin de pouvoir y faire référence. C’est ce que vous propose la méthode “urlFor()”
Adresses des Ressources
On souhaite obtenir l’adresse d’une ResourceReference associée à l’image “myImage.png” .
Cette image étant une ressource au sens Wicket, elle sera déployée dans le répertoire protégé “WEB-INF/classes”, et sera donc inaccessible directement. Pour contourner cette restriction, Wicket propose un mapping spécial (“/resources”) mais les bonnes pratiques de développement nous interdisent de l’utiliser explicitement. Il faut donc user du subterfuge suivant :
-
String imagePath = RequestCycle.get().urlFor(image).toString();
… qui va renvoyer (par exemple) : “http://localhost:8080/wicketApp/resources/<myPackageName>.<myClassName>/myImage.png”
Adresse des pages
De la même façon, on peut obtenir l’adresse d’une page :
-
String pagePath = parent.urlFor(myPage.class, new PageParameters()).toString();
… va renvoyer la String permettant d’accéder à la page recherchée.
Avec Wicket, tout est simple !