En utilisant des JSP, vous disposez de
certains tags (comme <useBean> et
<getProperty>) immédiatement. Et,
pour afficher des valeurs uniques
simples, <useBean> et <getProperty>
sont un couple gagnant. Mais
que se passe-t-il en cas de besoin plus complexe: comme un nombre variable
d'employés à afficher dans une table
HTML ?
Un tag custom
En examinant la dernière partie du
JSP, on voit que chaque employé est affiché
en vertu de <useBean>/ <get-
Property>. Cette fois-ci, le nom du
bean est « employee » (et pas – cela n’a
pas été établi comme un attribut de
session de servlet). <getProperty> apparaît
plusieurs fois à la suite pour afficher
les attributs de l’employé. La
question intéressante est la suivante :
comment se fait-il que l’employé
change d’une ligne à l’autre ?
La réponse se trouve dans un tag
custom qui m’est propre, appelé
<cycle>. Son but est de parcourir de
manière cyclique les éléments d’une
collection. Le tag d’ouverture se présente
ainsi :
<ta:cycle collectionName="empCollection" beanName="employee">
Le paramètre collectionName identifie
le nom d’un attribut de session
contenant une collection (« emp-
Collection » qui, on s’en souvient, A
ETE définie dans le code du servlet).
« beanName » identifie le nom d’un
bean déclaré avec <jsp :useBean> qui
contiendra l’élément courant dans la
collection au fur et à mesure que le
cycle continue.
Vient ensuite le corps du tag : plusieurs
lignes de HTML englobant une
ligne de table complète et plusieurs
cellules obtenant des propriétés à partir
du bean « employee ». Le tag de fin
(pratiquement en bas du JSP) est
</ta :cycle>.
Il faut maintenant un peu « d’infrastructure
» pour accompagner l’établissement
d’un tag (voir l’encadré « Custom
Tag Infrastructure » sur www.
itpro.fr Club abonnés). Je veux me
concentrer ici sur les principaux éléments
du code d’appui, qui se trouve
dans le fichier source Java Cycling-
Tag.java.
CyclingTag étend une classe Java
existante appelée BodyTagSupport. Là
où un JSP inclut un tag custom, il obéit
aux conventions régissant quelles méthodes
il faut appeler dans Body-
TagSupport (et les classes associées) et
dans quel ordre. La figure 1 montre le
cycle de vie simplifiée pour CyclingTag
et la figure 2 montre le code source.
Pour économiser de l’espace, j’ai éliminé
les noms de packages, les instructions
d’importation et les commentaires.
Les lignes de 6 à 11 ont une poignée
de méthodes « set ». Vous verrez
qu’elles sont associées aux paramètres du tag (collectionName et beanName). Donc, dans le
contexte de mon application, collectionName est « emp-
Collection » et beanName est « employee ». Observez que le tag
est « employee-agnostic ». N’importe quel collectionName
et beanName fera l’affaire : cela rend le tag utilisable dans
d’autres applications ayant des finalités entièrement différentes.
La méthode doStartTag() commençant en ligne 13 est appelée
avant que le corps du tag n’ait été inclus dans la page
Web et elle n’est pas appelée à nouveau. Les servlets ont accès
à l’objet HttpSession, ainsi que les tags custom. On voit
comment en ligne 14. Cela permet au code de s’approprier
l’attribut de session « empCollection » à la ligne 16. Il attend
un objet Collection-type ; si l’attribut de session n’est pas une
Collection, il y aura du grabuge !
Toutes les Collections contiennent un Iterator (ligne 17)
qui est utilisé pour passer au travers de chaque élément dans
la collection. Iterator a deux méthodes très utiles : next(),
pour renvoyer l’élément suivant dans la colonne, et
hasNext(), pour déterminer s’il y a d’autres éléments à renvoyer.
Si hasNext() renvoie false à la ligne 18, il n’y a pas d’éléments
dans la collection. Cela signifie un code de renvoi
SKIP_BODY en ligne 22. Grâce à ce mécanisme, le code du
tag dit au JSP de ne pas se préoccuper de l’impression du
corps du tag (pas même une fois ; il n’y a pas d’employé à afficher).
S’il y a un employé « next() », il est chargé dans l’attribut
de session « employee » (ligne 19). Cette fois-ci, le code
de renvoi est EVAL_BODY_INCLUDE – le code tag demandant
au JSP de bien vouloir inclure le corps pour ce premier
employé.
doAfterBody() (ligne 26) est appelé après chaque inclusion
du corps du tag. La logique est très similaire à
doStartTag(). Vérifiez s’il y a d’autres employés à venir. Si
c’est le cas, ajustez l’attribut de session employee et imprimez
le corps à nouveau (EVAL_ BODY_AGAIN). Dans le cas
contraire, sautez le corps du tag et finissez le cycle.
Téléchargez cette ressource
Microsoft 365 Tenant Resilience
Face aux failles de résilience des tenants M365 (configurations, privilèges, sauvegarde). Découvrez 5 piliers pour durcir, segmenter et surveiller vos environnements afin de limiter l’impact des attaques. Prioriser vos chantiers cyber et améliorer la résilience de vos tenants Microsoft 365.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Le trilemme de la souveraineté : le coût caché du cloud qui freine l’IA en Europe
- Moderniser le développement logiciel : de la fragmentation à l’intégration
- Semperis : gouverner l’identité à l’ère des agents IA
- Analyse Patch Tuesday Mars 2026
Articles les + lus
Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
Moderniser le développement logiciel : de la fragmentation à l’intégration
Analyse Patch Tuesday Mars 2026
Une nouvelle ère de la modernisation du mainframe
Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
À la une de la chaîne Tech
- Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
- Moderniser le développement logiciel : de la fragmentation à l’intégration
- Analyse Patch Tuesday Mars 2026
- Une nouvelle ère de la modernisation du mainframe
- Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
