> Tech > Un tag custom

Un tag custom

Tech - Par iTPro - Publié le 24 juin 2010
email

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 ?

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 gratuitement cette ressource

Protection des Données : 10 Best Practices

Protection des Données : 10 Best Practices

Le TOP 10 des meilleures pratiques, processus et solutions de sécurité pour mettre en œuvre une protection efficace des données et limiter au maximum les répercutions d’une violation de données.

Tech - Par iTPro - Publié le 24 juin 2010