Taglibs [Partie 2]: Mise en place d’un TagLib

Dernière mise à jour le 30 octobre 2009 à 14:49 par marlalapocket
Publié par n00r

Voir la première partie de l'astuce Taglibs (Partie 1): Présentation

Taglibs [Partie 2]: Mise en place d’un TagLib


Un fichier XML qui est le descripteur de Taglib est obligatioire pour utiliser une TagLib. Ce fichier définie les balises (tags) de la librairie. Ci-dessous un exemple :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib>
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	 <short-name>montagamoi</short-name>

<uri>http://www.owliance.com/taglibs/montagamoi-1.0</uri>
	<description>Bibliothèque de taglibs</description>	
<tag>
		<name>switchtag</name>
		<tag-class>monpackage.SwitchTag</tag-class>
		<description>Tag qui affiche le corps ...</description>
		<attribute>
			<name>test</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	<tag>
		<name>casetag</name>
		<tag-class>monpackage.CaseTag</tag-class>
		<description>Tag qui affiche le corps ...</description>
		<attribute>
			<name>value</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	<tag>
		<name>iteratetag</name>
		<tag-class>monpackage.IterateTag</tag-class>
		<description>Tag qui affiche le corps ...</description>
		<attribute>
			<name>count</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<type>java.lang.Integer</type>
		</attribute>
	</tag>
</taglib>


Dans ce fichier exemple, nous trouvons trois tags :
  • Switchtag et Casetag : pour la simulation d’un bloc « switch … case »
  • Iteratetag : pour la simulation d’un itérateur.


Les informations de la première partie du fichier tld sont :
  • <tlib-version> : obligatoire, elle concerne la version de la librairie.
  • <jsp-version> : Obligatoire, définie la version JSP.
  • <short-name> : Obligatoire , définie le nom de la librairie.
  • <description> : optionnelle, c’est la description de la de la librairie
  • <tag> : cette balise doit exister à chaque fois qu’on définie une Tag de la librairie


En ce qui concerne les balises qui composent la librairie :
  • Tag : pour déclarer un nouveau tag.
  • Name : nom de Tag et c’est ce nom qui sera utilisé dans les pages JSP.
  • Tag-Class : définie la classe du TagLib.
  • body-content : Optionnel, définie le type du corps du tag
    • JSP : le corps de tag contient des tag JSP
    • tagdependent : l’interprétation du corps se fait par le tag
    • empty : le corps doit être vide
  • Description : description de tag.
  • Attribute : c’est la liste des attributs du tag.

Le Tag « attribute » contient les balises suivantes :


*
    • Name : nom d’attribut
    • Required :
      • true : attribut est obligatoire
      • false : optionnel.
    • Rtexprvalue : définie si l’attribut peut être le résultat d’une tag expression.
    • Type : type de l’attribut, par défaut, c’est java.lang.String.


Dans la page JSP qui utilise la Taglib:
<%@ taglib uri="http://www.owliance.com/taglibs/montagamoi-1.0" prefix="montagamoi"%>

<br/>
<br/>
<montagamoi:iteratetag count="10">
<br/>
<montagamoi:switchtag test="3">
<montagamoi:casetag value="0">Zéro</montagamoi:casetag>
<montagamoi:casetag value="1">Un</montagamoi:casetag>
<montagamoi:casetag value="2">Deux</montagamoi:casetag>
<montagamoi:casetag value="3">Trois</montagamoi:casetag>
</montagamoi:switchtag>
</montagamoi:iteratetag>


Ci-dessous le contenu de la classe IterateTag.java

package monpackage;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class IterateTag extends BodyTagSupport {
	/**

	 * 
	 */
	private static final long serialVersionUID = 9368853820192946960L;
	private int count = 0;
	private int current;


	public void setCount(int i) {
		count = i;
	}

	public int doStartTag() throws JspException {
		current = 0;
		if (current < count) {
			return EVAL_BODY_INCLUDE;
		} else {
			return SKIP_BODY;
		}
	}

	public int doAfterBody() throws JspException {
		current++;
		if (current < count) {
			return EVAL_BODY_AGAIN;
		} else {
			return SKIP_BODY;
		}
	}
}


Ci-dessous le contenu de la classe CaseTag

package monpackage;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class CaseTag extends TagSupport {
	public String value;

	public void setValue(String p_value) {
		this.value = p_value;
	}

	public int doStartTag() throws JspException {
		if (this.getParent() instanceof SwitchTag) {
			SwitchTag parent = (SwitchTag) getParent();
			if (parent.isValid(this.value))
				return EVAL_BODY_INCLUDE;
			else
				return SKIP_BODY;
		} else {
			throw new JspException(
					"Le Tag case doit être à l'intérieur du tag Switch");
		}

	}
}


Ci-dessous le contenu de la classe SwitchTag

package monpackage;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class SwitchTag extends TagSupport {
	/**

	 * 
	 */
	private static final long serialVersionUID = 3752830055610590228L;
	private String test;

	public int doStartTag() throws JspException {
		return EVAL_BODY_INCLUDE;
	}

	public void setTest(String p_value) {
		test = p_value;
	}

	public boolean isValid(String caseValue) {
		if (test == null)
			return false;
		return (test.equals(caseValue));
	}
}



*
    • doStartTag() est appelée lors de la rencontre de la balise d’ouverture, elle retourne un entier
      • EVAL_BODY_INCLUDE : traitement continu avec évaluation du corps
      • SKIP_BODY : poursuite du traitement sans évaluation du corps
    • doEndTag() est appelée lors de la rencontre de la balise de fermeture, elle retourne un entier
      • EVAL_PAGE : poursuivre le traitement de la JSP
      • SKIP_PAGE : interrompre le traitement du reste de la JSP.
Meilleures réponses pour « Taglibs : Mise en place d’un TagLib » dans :
Taglibs [Partie 1]: Présentation VoirPrésentation des TagLibs Frameworks se basant sur les Taglibs Différentes Versions des Taglib Présentation des TagLibs Les Tag Librairies ou JSP Tag Libraries sont des librairies développées pour être intégrées et utilisées dans les...
[appareils Philips] Mise a jour firmware ou codec VoirMise a jour du firmware ou des codecs Philips pour - lecteur DVD de salon - lecteur et graveur interne PC Philips International a mis en place une nouvelle mise en page pour la recherche des firmwares et des drivers de ses appareils :...
Gagner de la place sur son disque dur VoirProblème Comment faire pour gagner de la place sur mon disque dur ? Solution Pour gagner un peu d'espace disque (vieux pc ou ULPC) vous pouvez : Supprimer les fichiers de desinstallation de mises a jour se trouvant dans le repertoire Windows...
Mise en place d'une démarche qualité VoirMise en place d'une démarche qualité L'amélioration de la qualité (réduction des non-qualités et amélioration des processus de travail) dans une entreprise demande une réflexion associant la direction et l'ensemble du personnel afin de définir des...
Mise en place d'un réseau sous Windows VoirMise en réseau sous Windows 2000/XP Pour configurer chaque ordinateur, il suffit d'aller dans le panneau de configuration, puis de double-cliquer sur « connexions réseau », ensuite de cliquer avec le bouton droit sur « connexion au réseau...
Introduction à la mise en place d'un Intranet VoirStatut de ce document Ce document expliquant comment mettre en place un intranet sous une machine fonctionnant avec Linux a été réalisé en partenariat avec www.tldp.org/, dont le webmaster (Michel Maudet) est l'auteur du document original...