Date de publication : 03/01/2005. Date de mise à jour : 08/08/2011.
<jsp:useBean id="monBean" scope="session" class="package.MonObject" >
<jsp:setProperty name="monBean" property="monAttribut" value="1.0" />
</jsp:useBean>
<jsp:include page="maPage.jsp"/>
<jsp:redirect page="maPage.jsp"/>
etc.
<prefixe:nomDuTag attribut="valeur">
Corps du tag
</prefix:nomDuTag>
<prefixe:nomDuTag attribut="valeur" attribut2="valeur2" attribut3="valeur3"
attribut4="valeur4" attribut5="valeur5" />
<prefixe:nomDuTag attribut="valeur"></prefixe:nomDuTag>
<prefixe:nomDuTag attribut="valeur">
<prefixe:nomDuTag>corps</prefixe:nomDuTag>
</prefixe:nomDuTag>
<prefixe:nomDuTag/>
<%@ taglib uri="/WEB-INF/taglib.tld" prefix="tag-prefix" %>
// ou si le fichier tld est dans le Jar :
<%@ taglib uri="/WEB-INF/lib/taglib.jar" prefix="tag-prefix" %>
<taglib>
<taglib-uri>taglib-URI</taglib-uri>
<taglib-location>/WEB-INF/lib/taglib.jar</taglib-location>
</taglib>
<%@ taglib uri="taglib-URI" prefix="tag-prefix" %>
| Taglib | JSP | J2EE |
|---|---|---|
| 1.1 | 1.1 | 1.2.1 |
| 1.2 | 1.2 | 1.3 |
| 2.0 | 2.0 | 1.4 |
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
...
</taglib>
| Nom | Description | Type |
|---|---|---|
| tlibversion | Le numéro de la version de la librairie de tag. |
obligatoire
Format : [0-9]*{ "."[0-9] }0..3 |
| jspversion | Le numéro de version des JSP requis pour la librairie. | optionnel (défaut: 1.1) |
| shortname | Définit un préfixe pour les tags de la librairie. Attention : Le prefix utilisé sera toujours celui de la directive taglib de la page JSP. Celui définit ici permet aux éditeurs JSP d'insérer la directive taglib avec le préfixe indiqué. |
obligatoire |
| uri | Définit une URI (Uniform Resource Identifier) qui identifie la taglibrairie. Il s'agit de l'URI à utiliser pour identifier la taglib dans le web.xml et les pages JSP. |
optionnel |
| info | Un texte de description de la librairie. | optionnel |
| tag | Description d'un tag de la librairie. (Voir la section Déclaration de tag) |
Au moins une. |
| Nom | Description | Type |
|---|---|---|
| name | Le nom du tag tel qu'il devra être utilisé dans les JSP. | obligatoire |
| tagclass | Le nom complet (package compris) de la classe Java qui représente ce tag (sous-classe de javax.serlvet.jsp.tagext.Tag). | obligatoire |
| teiclass | Le nom complet (package compris) de la classe Java qui apporte des informations supplémentaires sur le tag (sous-classe de javax.serlvet.jsp.tagext.TagExtraInfo). | optionnel |
| bodycontent | Indique le type de contenu du corps du tag : empty : Le tag n'accepte aucun corps (une exception sera lancée si il est utilisé avec un corps quelconque). JSP : Le contenu du tag est interprétés comme du JSP. tagdependent : Le corps du tag ne sera pas interprété. Si il contient du code il sera affiché comme du simple texte. |
optionnel (défaut : JSP) |
| info | Un texte de description du tag. | optionnel |
| attribute | Définition des différents attributs du tag | optionnel une balise par attribut. Cf : Définir un attribut du tag. |
| Nom | Description | Type |
|---|---|---|
| name | Le nom de l'attribut tel qu'il devra être utilisé dans les JSP. | obligatoire |
| required | Indique si l'attribut est requis (valeur possible : true/false ou yes/no). | optionnel (défaut : false) |
| rtexprvalue | Indique si l'attribut peut être le résultat d'une scriptlet (valeur possible : true/false ou yes/no). | optionnel (défaut : false) |
public void setValeur (String valeur) {
this.valeur = valeur;
}
public class HelloTag extends TagSupport {
public int doStartTag() throws JspException {
try {
pageContext.getOut().println ("Hello World !");
} catch (IOException e) {
throw new JspException ("I/O Error", e);
}
return SKIP_BODY;
}
}
<tag>
<name>hello</name>
<tagclass>tutoriel.taglib.HelloTag</tagclass>
<bodycontent>empty</bodycontent>
</tag>
<tag11:hello/>
Hello World !
<tag>
<name>hello</name>
<tagclass>tutoriel.taglib.HelloTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>name</name>
</attribute>
</tag>
public class HelloTag extends TagSupport {
private String name = null;
public void setName (String string) {
this.name = string;
}
public int doStartTag() throws JspException {
if (this.name==null)
this.name = "World";
try {
pageContext.getOut().println ("Hello " + this.name + " !");
} catch (IOException e) {
throw new JspException ("I/O Error", e);
}
return SKIP_BODY;
}
}
<tag11:hello/><br/>
<tag11:hello name="Fred"/>
Hello World !
Hello Fred !
public class ParamPresentTag extends TagSupport {
private String name = null;
public void setName (String string) {
this.name = string;
}
public int doStartTag() throws JspException {
String value = pageContext.getRequest().getParameter(this.name);
if (value!=null)
return EVAL_BODY_INCLUDE;
return SKIP_BODY;
}
}
<tag>
<name>paramPresent</name>
<tagclass>tutoriel.taglib.ParamPresentTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>name</name>
<required>true</required>
</attribute>
</tag>
<tag11:paramPresent name="page">
Le paramètre page vaut : <%=request.getParameter("page")%>.
</tag11:paramPresent>
Le paramètre page vaut : valeur.
public class SwitchTag extends TagSupport {
private Object test = null;
public void setTest (Object obj) {
this.test = obj;
}
public int doStartTag() throws JspException {
return EVAL_BODY_INCLUDE;
}
public boolean isValid (Object caseValue) {
if (this.test==caseValue) return true;
if (this.test!=null && this.test.equals(caseValue)) return true;
return false;
}
}
public class CaseTag extends TagSupport {
public Object value = null;
public void setValue (Object object) {
this.value = object;
}
public int doStartTag() throws JspException {
if ( getParent() instanceof SwitchTag ) {
SwitchTag parent = (SwitchTag) getParent();
if (parent.isValid(this.value))
return EVAL_BODY_INCLUDE;
return SKIP_BODY;
}
throw new JspException ("Le tag case doit être à l'intérieur du tag swith.");
}
}
<tag11:switch test="2">
<tag11:case value="0">Zéro</tag11:case>
<tag11:case value="1">Un</tag11:case>
<tag11:case value="2">Deux</tag11:case>
<tag11:case value="3">Trois</tag11:case>
</tag11:switch>
Deux
public class IterateTag extends BodyTagSupport {
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 Tag.EVAL_BODY_TAG;
return Tag.SKIP_BODY;
}
public int doAfterBody() throws JspException {
current++;
if (current < count)
return IterationTag.EVAL_BODY_TAG;
return Tag.SKIP_BODY;
}
}
<tag11:iterate count="3">
Cette ligne sera affichée trois fois<br/>
</tag11:iterate>
Cette ligne sera affichée trois fois<br/>
Cette ligne sera affichée trois fois<br/>
Cette ligne sera affichée trois fois<br/>
public class UpperCaseTag extends BodyTagSupport {
public int doStartTag() throws JspException {
return EVAL_BODY_TAG;
}
public int doAfterBody() throws JspException {
try {
if ( getBodyContent()!=null ) {
String bodyString = getBodyContent().getString();
bodyString = bodyString.toUpperCase();
getBodyContent().getEnclosingWriter().println( bodyString );
}
} catch (IOException e) {
throw new JspException (e);
}
return EVAL_PAGE;
}
}
<tag11:upperCase>Ce texte sera mis en majuscule, ainsi que le résultat de ce <%="scriptlet"%>.</tag11:upperCase>
CE TEXTE SERA MIS EN MAJUSCULE, AINSI QUE LE RÉSULTAT DE CE SCRIPTLET.
public class PerlTag extends BodyTagSupport {
private Process process = null;
protected void startProcess () throws JspException {
try {
process = Runtime.getRuntime().exec("perl");
} catch (IOException e) {
throw new JspException ("Erreur de creation du process 'perl'.", e);
}
}
protected void writeBody () throws JspException {
// On recupere les flux STDIN du process 'perl'
OutputStream stdin = process.getOutputStream();
OutputStreamWriter stdinWriter = new OutputStreamWriter (stdin);
try {
// On écrit dans le STDIN du process le contenu du tag :
getBodyContent().writeOut( stdinWriter );
} catch (IOException e) {
throw new JspException ("Erreur d'ecriture du body.", e);
} finally {
// Fermeture des flux ...
try { stdinWriter.close(); } catch (IOException e) {}
try { stdin.close(); } catch (IOException e) {}
}
}
protected void readErrors () throws JspException {
// On recupere les flux STDERR du process 'perl'
InputStream stdout = process.getErrorStream();
InputStreamReader stdoutReader = new InputStreamReader (stdout);
BufferedReader stdoutBuffer = new BufferedReader (stdoutReader);
StringBuffer errorBuffer = null;
try {
// On récupère chaque ligne du STDERR dans un buffer :
String line = null;
while ( ( line = stdoutBuffer.readLine() ) != null ) {
if (errorBuffer==null)
errorBuffer = new StringBuffer ();
errorBuffer.append(line);
}
} catch (IOException e) {
throw new JspException ("Erreur de lecture du résultat.", e);
} finally {
// Fermeture des flux ...
try { stdoutBuffer.close(); } catch (IOException e) {}
try { stdoutReader.close(); } catch (IOException e) {}
try { stdout.close(); } catch (IOException e) {}
}
// Si le buffer n'est pas vide, on envoi une exception
if (errorBuffer!=null)
throw new JspException ("Perl Script Error : " + errorBuffer);
}
protected void readResult () throws JspException {
// On recupere les flux STDOUT du process 'perl'
InputStream stdout = process.getInputStream();
InputStreamReader stdoutReader = new InputStreamReader (stdout);
BufferedReader stdoutBuffer = new BufferedReader (stdoutReader);
try {
// On récupère chaque ligne du STDOUT et on l'affiche :
String line = null;
while ( ( line = stdoutBuffer.readLine() ) != null ) {
getPreviousOut().print(line);
}
} catch (IOException e) {
throw new JspException ("Erreur de lecture du résultat.", e);
} finally {
// Fermeture des flux ...
try { stdoutBuffer.close(); } catch (IOException e) {}
try { stdoutReader.close(); } catch (IOException e) {}
try { stdout.close(); } catch (IOException e) {}
}
}
public int doStartTag() throws JspException {
return EVAL_BODY_TAG;
}
public int doAfterBody() throws JspException {
startProcess();
writeBody ();
readErrors ();
readResult ();
return SKIP_BODY;
}
}
<tag11:perl>
$lang = "perl";
printf ( "Utilisation du langage %s dans une page JSP", $lang );
</tag11:perl>
Utilisation du langage perl dans une page JSP
public class ParamPresentTag extends TagSupport {
private String name = null;
public void setName (String string) {
this.name = string;
}
public int doStartTag() throws JspException {
String value = pageContext.getRequest().getParameter(this.name);
if (value!=null) {
pageContext.setAttribute("value", value);
return EVAL_BODY_INCLUDE;
}
return SKIP_BODY;
}
public int doEndTag() throws JspException {
pageContext.removeAttribute("value");
return EVAL_PAGE;
}
}
<tag11:paramPresent name="page">
Le paramètre page vaut : <%=pageContext.getAttribute("value")%>.
</tag11:paramPresent>
public class ParamPresentTEI extends TagExtraInfo {
public VariableInfo[] getVariableInfo(TagData tagData) {
VariableInfo[] vi = new VariableInfo[1];
vi[0] = new VariableInfo("value", "java.lang.String", true, VariableInfo.NESTED);
return vi;
}
}
<%
//
// Les variables AT_BEGIN sont déclarées ici
//
{ // Début du bloc du tag
//
// Les variables NESTED sont déclarées ici
//
...
tag.doStartTag();
...
tag.doInitBody();
...
tag.doAfterBody();
...
tag.doEndTag();
...
} // Fin du bloc du tag
//
// Les variables AT_END sont déclarées ici
//
%>
<tag>
<name>paramPresent</name>
<tagclass>tutoriel.taglib.ParamPresentTag</tagclass>
<teiclass>tutoriel.taglib.ParamPresentTEI</teiclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>name</name>
<required>true</required>
</attribute>
</tag>
<tag11:paramPresent name="page">
Le paramètre page vaut : <%=value%>.<br/>
En Majuscule : <%=value.toUpperCase()%>.
</tag11:paramPresent>
public boolean isValid(TagData tagData) {
if (tagData.getAttributeString("name").trim().equals(""))
return false;
return true;
}
<tag11:paramPresent name="">corps</tag11:paramPresent>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
...
</taglib>
| Nom (nom 1.1) | Description | Type |
|---|---|---|
| tlib-version (tlibversion) | Le numéro de la version de la librairie de tag. |
obligatoire
Format : [0-9]*{ "."[0-9] }0..3 |
| jsp-version (jspversion) | Le numéro de version des JSP requis pour la librairie. |
obligatoire
(minimum : 1.2) |
| short-name (shortname) | Définit un préfixe pour les tags de la librairie. Attention : Le prefix utilisé sera toujours celui de la directive taglib de la page JSP. Celui définit ici permet aux éditeurs JSP d'insérer la directive taglib avec le préfixe indiqué ici. |
obligatoire |
| uri (uri) | Définit une URI (Uniform Resource Identifier) qui identifie la taglibrairie. Il s'agit de l'URI à utiliser pour identifier la taglib dans le web.xml et les pages JSP. |
optionnel |
| display-name | Nom de la librairie qui représentera la taglib dans les outils de développement graphiques compatibles. | optionnel |
| small-icon | Chemin relatif d'une image GIF ou JPEG (format 16x16) qui représentera la taglib dans les outils de développement graphiques compatibles. | optionnel |
| large-icon | Chemin relatif d'une image GIF ou JPEG (format 32x32) qui représentera la taglib dans les outils de développement graphiques compatibles. | optionnel |
| description (info) | Un texte de description de la librairie. | optionnel |
| validator | Définit une classe qui valide la page JSP qui utilise cette librairie de tag. (Voir la section Le validateur de taglib) |
optionnel |
| listener | Définit un listener qui sera instancié et qui surveillera les événements de l'application. (Voir la section Les listeners) |
optionnel plusieurs listeners possible |
| tag | Description d'un tag de la librairie. (Voir la section Déclaration de tag) |
Au moins une. |
| Nom | Description | Type |
|---|---|---|
| validator-class | Le nom de la classe qui étend de javax.servlet.jsp.tagext.TagLibraryValidator. | obligatoire |
| init-param | Un (ou plusieurs) paramètre d'initialisation du validateur. Ils seront passés à l'instance du validateur via la méthode setInitParameters(Map). | optionnel |
| description | Une description du validateur. | optionnel |
public ValidationMessage[] validate(String prefix, String uri, PageData page);
<listener>
<listener-class>package.ListenerClassName</listener-class>
</listener>
| Nom (nom 1.1) | Description | Type |
|---|---|---|
| name (name) | Le nom du tag tel qu'il devra être utilisé dans les JSP. | obligatoire |
| tag-class (tagclass) | Le nom complet (package compris) de la classe Java qui représente ce tag (sous-classe de javax.serlvet.jsp.tagext.Tag). | obligatoire |
| tei-class (teiclass) | Le nom complet (package compris) de la classe Java qui apporte des informations supplémentaires sur le tag (sous-classe de javax.serlvet.jsp.tagext.TagExtraInfo). | optionnel |
| body-content (bodycontent) | Indique le type de contenu du corps du tag : empty : Le tag n'accepte aucun corps (une exception sera lancée si il est utilisé avec un corps quelconque). JSP : Le contenu du tag est interprété comme du JSP. tagdependent : Le corps du tag ne sera pas interprété. Si il contient du code il sera affiché comme du simple texte. |
optionnel (défaut : JSP) |
| display-name | Nom du tag utilisé dans les outils de développement graphiques compatibles. | optionnel |
| small-icon | Chemin relatif d'une image GIF ou JPEG (format 16x16) qui représentera le tag dans les outils de développement graphiques compatibles. | optionnel |
| large-icon | Chemin relatif d'une image GIF ou JPEG (format 32x32) qui représentera le tag dans les outils de développement graphiques compatibles. | optionnel |
| description (info) | Un texte de description du tag. | optionnel |
| variable | Déclaration des variables de script utilisées par le tag. (Voir [JSP 1.2] Déclaration des variables de script |
optionnel Une balise par variable |
| attribute (attribute) | Définition des différents attributs du tag | optionnel une balise par attribut. Cf : Définir un attribut du tag. |
| exemple | Description d'un exemple d'utilisation du tag. | optionnel |
| Nom | Description | Type |
|---|---|---|
| name | Le nom de l'attribut tel qu'il devra être utilisé dans les JSP. | obligatoire |
| required | Indique si l'attribut est requis (valeur possible : true/false ou yes/no). | optionnel (défaut : false) |
| rtexprvalue | Indique si l'attribut peut être le résultat d'une scriptlet (valeur possible : true/false ou yes/no). | optionnel (défaut : false) |
| type | Indique le type Java de l'attribut (si rtexprvalue==true). | optionnel (défaut : "java.lang.String") |
| description | Un texte de description de l'attribut. | optionnel |
| Nom | Description | Type |
|---|---|---|
| name-given | Le nom de la variable de script. | Un de name-given ou name-from-attribute est obligatoire. |
| name-from-attribute | Le nom de l'attribut du tag qui contiendra le nom de la variable de script. Dans ce cas, la valeur de cet attribut doit avoir une valeur statique (rtexprvalue=false). |
Un de name-given ou name-from-attribute est obligatoire. |
| variable-class | Nom de la classe utilisé pour la déclaration de la variable. | optionnel (défaut: "java.lang.String") |
| declare | Indique si la variable doit être déclarée ou pas. | optionnel (défaut: true) |
| scope | Détermine la zone de portée de la variable. Valeurs possibles : NESTED, AT_BEGIN ou AT_END. (Voir Création de variable de script avec TagExtraInfo) |
optionnel (défaut: NESTED) |
| description | Un texte de description de la variable. | optionnel |
public class BeanTag extends TagSupport {
public String name = null;
public Object value= null;
public void setName(String string) {
name = string;
}
public void setValue(Object object) {
value = object;
}
public int doStartTag() throws JspException {
pageContext.setAttribute(name,value);
return SKIP_BODY;
}
}
<tag>
<name>bean</name>
<tag-class>tutoriel.taglib_1_2.BeanTag</tag-class>
<bodycontent>empty</bodycontent>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<variable>
<name-from-attribute>name</name-from-attribute>
<variable-class>java.lang.Object</variable-class>
<declare>true</declare>
<scope>AT_END</scope>
</variable>
</tag>
<tag11:bean name="date" value="<%=new java.util.Date()%>"/>
<tag11:bean name="text" value="Un simple message"/>
<%=date + ": " + text%>
Sun Dec 26 20:18:32 CET 2004: Un simple message
public class NewIterateTag extends TagSupport {
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 Tag.EVAL_BODY_INCLUDE;
return Tag.SKIP_BODY;
}
public int doAfterBody() throws JspException {
current++;
if (current < count)
return IterationTag.EVAL_BODY_AGAIN;
return Tag.SKIP_BODY;
}
}
public class SystemPropertiesTag extends TagSupport {
private Enumeration propertyName = null;
public boolean doNext () {
if ( propertyName.hasMoreElements() ) {
String name = (String) propertyName.nextElement();
String value = System.getProperty(name);
pageContext.setAttribute("name", name);
pageContext.setAttribute("value", value);
return true;
}
return false;
}
public int doStartTag() throws JspException {
// Iterateur sur les propriétés
propertyName = System.getProperties().propertyNames();
if (doNext())
return EVAL_BODY_INCLUDE;
return SKIP_BODY;
}
public int doAfterBody() throws JspException {
if (doNext())
return EVAL_BODY_AGAIN;
return SKIP_BODY;
}
public int doEndTag() throws JspException {
pageContext.removeAttribute("name");
pageContext.removeAttribute("value");
return EVAL_PAGE;
}
}
public class SystemPropertiesTEI extends TagExtraInfo {
public VariableInfo[] getVariableInfo(TagData tagData) {
return new VariableInfo[] {
new VariableInfo("name", "java.lang.String",true,VariableInfo.NESTED),
new VariableInfo("value","java.lang.String",true,VariableInfo.NESTED)
};
}
}
<table>
<tr><td>Nom</td><td>Valeur</td></tr>
<tag12:systemProperties>
<tr><td><%=name%></td><td><%=value%></td></tr>
</tag12:systemProperties>
</table>
try {
...
tag.doStartTag();
...
tag.doInitBody();
...
tag.doAfterBody();
...
tag.doEndTag();
...
} catch (Throwable t) {
tag.doCatch(t);
} finally {
tag.doFinally();
}
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
...
</taglib>
| Nom | Description | Type |
|---|---|---|
| description (info) | Un texte de description de la librairie. | optionnel |
| display-name | Nom de la librairie qui représentera la taglib dans les outils de développement graphiques compatibles. | optionnel |
| icon | Chemin relatif d'une image GIF ou JPEG qui représentera la taglib dans les outils de développement graphiques compatibles (remplace small-icon et large-icon). | optionnel |
| tlib-version (tlibversion) | Le numéro de la version de la librairie de tag. |
obligatoire
Format : [0-9]*{ "."[0-9] }0..3 |
| short-name (shortname) | Définit un préfixe pour les tags de la librairie. Attention : Le préfixe utilisé sera toujours celui de la directive taglib de la page JSP. Celui définit ici permet aux éditeurs JSP d'insérer la directive taglib avec le préfixe indiqué ici. |
obligatoire |
| uri (uri) | Définit une URI (Uniform Resource Identifier) qui identifie la taglibrairie. Il s'agit de l'URI à utiliser pour identifier la taglib dans le web.xml et les pages JSP. |
optionnel |
| validator | Définit une classe qui valide la page JSP qui utilise cette librairie de tag. (Voir la section [JSP1.2] Le validateur de taglib) |
optionnel |
| listener | Définit un listener qui sera instancié et qui surveillera les événements de l'application. (Voir la section [JSP1.2] Les listeners) |
optionnel plusieurs listeners possible |
| tag | Description d'un tag de la librairie depuis une classe Java. (Voir la section Déclaration de tag) |
optionnel, une balise par classe. |
| tag-file | Description d'un tag de la librairie depuis un fichier *.tag. (Voir la section Déclaration de tag-file) |
optionnel, une balise par fichier. |
| function | Description d'une fonction EL. (Voir la section Déclaration de fonction EL) |
optionnel, une balise par fonction |
| taglib-extension | Permet aux outils de développement de définir des extensions pour la taglib. | optionnel |
| Nom | Description | Type |
|---|---|---|
| description | Un texte de description du tag. | optionnel |
| display-name | Nom du tag utilisé dans les outils de développement graphiques compatibles. | optionnel |
| icon | Chemin relative d'une image GIF ou JPEG qui représentera le tag dans les outils de développement graphiques compatibles (remplace small-icon et large-icon). | optionnel |
| name | Le nom du tag tel qu'il devra être utilisé dans les JSP. | obligatoire |
| tag-class | Le nom complet (package compris) de la classe Java qui représente ce tag (sous-classe de javax.serlvet.jsp.tagext.Tag). | obligatoire |
| tei-class | Le nom complet (package compris) de la classe Java qui apporte des informations supplémentaires sur le tag (sous-classe de javax.serlvet.jsp.tagext.TagExtraInfo). | optionnel |
| body-content | Indique le type de contenu du corps du tag : empty : Le tag n'accepte aucun corps (une exception sera lancée si il est utilisé avec un corps quelconque). JSP : Le contenu du tag est interprété comme du JSP. tagdependent : Le corps du tag ne sera pas interprété. Si il contient du code il sera affiché comme du simple texte. scriptless : Le corps du tag ne peut alors contenir que du texte, des expressions EL et d'autres tags JSP, mais aucun scripts Java (<% ... %>). |
obligatoire |
| variable | Déclaration des variables de script utilisées par le tag. (Voir [JSP1.2] Déclaration des variables de script |
optionnel Une balise par variable |
| attribute | Définition des différents attributs du tag. (Voir Définir un attribut du tag) |
optionnel une balise par attribut. |
| dynamic-attributes | Autorise l'utilisation d'attributs dynamiques,
la classe Java représentant le tag doit alors implémenter l'interface DynamicAttributes. (Voir L'interface DynamicAttributes) |
optionnel (défaut : false) |
| exemple | Description d'un exemple d'utilisation du tag. | optionnel |
| tag-extension | Permet aux outils de développement de définir des extensions pour le tag. | optionnel |
| Nom | Description | Type |
|---|---|---|
| description | Un texte de description du tag. | optionnel |
| display-name | Nom du tag utilisé dans les outils de développement graphiques compatibles. | optionnel |
| icon | Chemin relatif d'une image GIF ou JPEG qui représentera le tag dans les outils de développement graphiques compatibles (remplace small-icon et large-icon). | optionnel |
| name | Le nom du tag tel qu'il devra être utilisé dans les JSP. | obligatoire |
| path | Le chemin d'accès relatif vers le fichier *.tag. (Voir Les fichiers *.tag) | obligatoire |
| exemple | Description d'un exemple d'utilisation du tag. | optionnel |
| tag-extension | Permet aux outils de développement de définir des extensions pour le tag. | optionnel |
| Nom | Description | Type |
|---|---|---|
| description | Un texte de description du de la fonction. | optionnel |
| display-name | Nom de la fonction utilisé dans les outils de développement graphiques compatibles. | optionnel |
| icon | Chemin relatif d'une image GIF ou JPEG qui représentera la fonction dans les outils de développement graphiques compatibles (remplace small-icon et large-icon). | optionnel |
| name | Le nom du fonction tel qu'il devra être utilisé dans les JSP. | obligatoire |
| function-class | Le nom de la classe Java qui implémente le code de la fonction. | obligatoire |
| function-signature | La signature exacte de la fonction, selon la spécification de Java. Exemple : java.lang.String functionName ( java.lang.String, int ) |
obligatoire |
| exemple | Description d'un exemple d'utilisation de la fonction. | optionnel |
| function-extension | Permet aux outils de développement de définir des extensions pour la fonction. | optionnel |
| Nom | Description | Type |
|---|---|---|
| description | Un texte de description de l'attribut. | optionnel |
| name | Le nom de l'attribut tel qu'il devra être utilisé dans les JSP. | obligatoire |
| required | Indique si l'attribut est requis (valeur possible : true/false ou yes/no). | optionnel (défaut : false) |
| rtexprvalue | Indique si l'attribut peut être le résultat d'une scriptlet ou d'une Expression Language (EL) (valeur possible : true/false ou yes/no). | optionnel (défaut : false) |
| type | Indique le type Java de l'attribut (si rtexprvalue==true). | optionnel (défaut : "java.lang.String") |
| fragment | Indique si l'attribut est un fragment. (Voir Utilisation de JspFragment |
optionnel (défaut : false) |
public class SimpleIterateTag extends SimpleTagSupport {
private int count = 0;
public void setCount (int value) {
this.count = value;
}
public void doTag() throws JspException, IOException {
for (int i=0; i<count; i++)
getJspBody().invoke(null);
}
}
<tag>
<name>simpleIterate</name>
<tag-class>com.developpez.adiguba.tutorial.taglibs_20.SimpleIterateTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>count</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
public void setDynamicAttribute(String uri, String localName, Object value);
<tag20:input type="text" name="nomDuBean"/>
<input type="text" name="nomDuBean" value=valeurDuBean"/>
public class InputTag extends SimpleTagSupport implements DynamicAttributes {
private Map attributes = new HashMap();
private String type = null;
private String name = null;
private String value = null;
public void setType(String string) {
type = string;
}
public void setName(String string) {
name = string;
}
public void setValue(String string) {
value = string;
}
public void setDynamicAttribute(String uri, String localName, Object value)
throws JspException {
// On place chaque attribut/valeur dans la Map attributes
attributes.put (localName, value);
}
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.print ("<input type='" + type + "' name='" + name + "' ");
if (value==null) {
// On recherche un attribut avec le même nom dans les != scopes
Object o = getJspContext().findAttribute(name);
value = o==null ? "" : o.toString();
}
out.print ("value='" + value + "' ");
Iterator iterator = attributes.entrySet().iterator();
while ( iterator.hasNext() ) {
Map.Entry entry = (Map.Entry) iterator.next();
out.print ( entry.getKey() + "='" + entry.getValue() + "' ");
}
out.print ("/>");
}
}
<tag>
<name>input</name>
<tag-class>com.developpez.adiguba.tutorial.taglibs_20.InputTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>type</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>value</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<dynamic-attributes>true</dynamic-attributes>
</tag>
<jsp:useBean id="input3" scope="page" class="java.util.Date"/>
Input1 : <tag20:input type="text" name="input1" class="green" readonly="true" value="statique"/><br/>
Input2 : <tag20:input type="text" name="input2" class="red" onfocus="methodeJavascript();"/><br/>
Input3 : <tag20:input type="text" name="input3" class="blue"/><br/>
Input1 : <input type='text' name='input1' value='statique' readonly='true' class='green' /><br/>
Input2 : <input type='text' name='input2' value='' class='red' onfocus='methodeJavascript();' /><br/>
Input3 : <input type='text' name='input3' value='Thu Dec 30 16:17:38 CET 2004' class='blue' /><br/>
| Nom | Description | Type |
|---|---|---|
| description (info) | Un texte de description de la librairie. | optionnel |
| display-name | Nom de la librairie qui représentera la taglib dans les outils de développement graphiques compatibles. | optionnel |
| body-content | Indique le type de contenu du corps du tag : empty : Le tag n'accepte aucun corps (une exception sera lancée si il est utilisé avec un corps quelconque). tagdependent : Le corps du tag ne sera pas interprété. Si il contient du code il sera affiché comme du simple texte. scriptless : Le corps du tag ne peut alors contenir que du texte, des expressions EL et d'autres tags JSP, mais aucun scripts Java (<% ... %>). Attention, les fichiers *.tag n'acceptent pas de body-content JSP ... |
optionnel (défaut : scriptless) |
| dynamic-attributes | Permet l'utilisation d'attribut dynamique. dynamic-attributes
doit contenir le nom d'un bean de type Map qui sera créé et stocké dans le scope "page".
Il contiendra tous les attributs qui n'ont pas été spécifiquement déclarés ... |
optionnel |
| exemple | Description d'un exemple d'utilisation du tag. | optionnel |
| import | Importation d'une classe Java (identique à <%@ page import="" %>). | optionnel |
<%@ taglib tagdir="/WEB-INF/tags/mestags/" prefix="tag-prefix" %>
<tag-prefix:monTag/>
<tag-prefix:unAutreTag param="value">
Corps
</tag-prefix:unautreTag>
<%@ attribute name="attribute-name"
required="true | false"
fragment="true | false"
rtexprvalue="true | false"
type="java.lang.String | a non-primitive type"
description="text"
%>
<%@ variable
{ name-given="scripting variable"
| (name-from-attribute="scripting variable" alias="locally-scoped attribute") }
[ variable-class="java.lang.String | name of the variable class" ]
[ declare="true | false" ]
[ scope="AT_BEGIN | AT_END | NESTED" ]
[ description="text" ]
%>
<div>
${prefix:fonction(param1,param2)}
</div>
<function>
<name>prop</name>
<function-class>java.lang.System</function-class>
<function-signature>java.lang.String getProperty(java.lang.String)</function-signature>
</function>
${tag20:prop("os.name")}
<%-- est équivalent à : --%>
<%= System.getProperty("os.name") %>
<prefix:nomDuTag>
<jsp:attribute name="nomAttribut">
code JSP ici
</jsp:attribute>
</prefix:nomDuTag>
<taglib>
<taglib-uri>taglib-URI</taglib-uri>
<taglib-location>/WEB-INF/lib/mytaglib.jar</taglib-location>
</taglib>
https://taglibrarydoc.dev.java.net/
java -jar tlddoc.jar [options] taglib1 taglib2...
java -jar tlddoc.jar -d docs -doctitle "My Taglib" -windowtitle "My Taglib" mytaglib.jar
http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/
http://adiguba.developpez.com/tutoriels/j2ee/jsp/jstl/
Copyright © 2000-2012 - www.developpez.com