décembre
2008
Bien que l’un des principes de base de Wicket est de séparer le HTML (présentation) de Java (le contrôle), il offre tout de même quelques goodies utilisables dans le HTML et qui permettent de simplifier les choses (sans toutefois aller jusqu’à un jeu de tags à la JSTL par exemple).
Dans ce billet, je parlais de l’un de ces goodies, qui est le <wicket:container>. Ici, je vais parler de <wicket:enclosure>.
Ce tag s’avère très utile dans la situation suivante : on a un ensemble de tags HTMLs dont l’un au moins est attaché à un composant Wicket, et la visibilité d’un de ces tags (qui doit être attaché à un composant Wicket) contrôle la visibilité de l’ensemble des tags.
Par exemple :
<div class="extra_info">
<span>Deuxième Nom :</span>
<span wicket:id="secondName">valeur</span>
</div>
et du côté Java :
add(new Label("secondName", person.getSecondName());
Si par exemple une des personnes ne dispose pas de second nom (sa valeur est nulle), on pourrait décider d’afficher le
Dans le second cas, il nous faut pouvoir contrôler la visibilité de tout le div depuis Wicket.
Or, pour ce faire, on devrait normalement attacher de div à un composant Wicket, puis cacher ce composant, ce qui est loin d’être idéal.
Pire encore, si l’ensemble de tags annexes ne sont pas groupés comme ici dans un seul tag, comme par exemple :
<h2>Infos optionnelles</h2>
<span>Deuxième Nom :</span>
<span wicket:id="secondName">valeur</span>
Cacher le tout serait encore plus fastidieux à réaliser : il nous faut soit attacher chacun des tags à un composant Wicket (et cacher chacun d’eux), ou encore les entourer d’un tag fantôme (
C’est loin d’être optimal car ça pollue inutilement le code (Java et HTML).
C’est là que le tag
Dans notre cas, le tag qui contrôle la visibilité du tout est le second span :
<span wicket:id="secondName">valeur</span>
Il suffit dès lors d’entourer le tout par un
<wicket:enclosure child="secondName">
<h2>Infos optionnelles</h2>
<span>Deuxième Nom :</span>
<span wicket:id="secondName">valeur</span>
</wicket:enclosure>
Dès lors, si du côté Java on cache le composant « secondName », c’est tout le bloc qui se trouve caché :
Label secondNameLabel = new Label("secondName", person.getSecondName());
if(person.getSecondName()==null){
secondNameLabel.setVisible(false);
}
add(secondNameLabel);
Vive Wicket ouaip lol
Par contre, pour avoir fait une présentation récemment, je trouve qu’il est un peu dur à présenter avantageusement : il n’est pas tout feu tout flamme ou « tout beau tout brillant à la sauce Marketing Powa ». Ou alors je présente mal, c’est aussi possible lol ^^
M’enfin, revenons en à nos moutons, au début j’ai cru que tu allais parler de closures, genre tu faisais du wicket en Scala, j’étais tout chose
Finalement, c’est purement du Wicket, et c’est pas plus mal ainsi Bonne présentation, c’est en effet une fonctionnalité intéressante !
Et pour révisez votre wicket, connaissez vous toutes les balises ?
Vérifiez ici : http://cwiki.apache.org/WICKET/wickets-xhtml-tags.html ! lol
++
jojo
loic38_01> Ca fait plaisir à entendre ça
lunatix> Ouep, ça marche avec Ajax (mais faut pas oublier les setOutputMarkupId hein)
Merci pour cette astuce et pour tous tes billets sur Wicket qui m’ont donné envie d ‘essayer ce framework:
j’utilise maintenant Wicket tous les jours dans mon travail et j’en suis vraiment satisfait.
pas mal ca ! j’avais l’habitude d’utiliser un webmarkupcontainer.
ta méthode gère bien une mise a visible/invisible via ajax ?