Architetture Net-Based
Tag Libraries - Implementazione
20
Giu
2002
Vediamo come implementare una Tag Library
Nell'articolo precedente abbiamo affrontato l'argomento delle Tag Libraries fornendo una descrizione di come si scrive un file .tld e di come si utilizza all'interno di una pagina JSP.
Riguardando il codice del file apogeo.tld:
<?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>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>apogeolib</shortname>
<uri>http://www.apogeonline.com/taglib</uri>
<info>Esempio di Tag Library</info>
<tag>
<name>hello</name>
<tagclass>com.apogeo.ciao</tagclass>
<bodycontent>empty</bodycontent>
<info>
Questo è un tag
</info>
<attribute>
<name>name</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>si può notare che viene definito l'unico tag che si chiama hello e che per esso viene definita un'implementazione nella classe com.apogeo.ciao
Ecco scoperto l'arcano: per implementare il tag personalizzato è sufficiente scrivere la classe com.apogeo.ciao il legame tra il tag e la sua implementazione viene descritto all'interno della libreria attraverso l'utilizzo della sezione
<tagclass>com.apogeo.ciao</tagclass>
/Vediamo un esempio di questa implementazione, si tratta del file
\WEB-INF\classes\com\apogeo\ciao.java
/che ha il seguente contenuto:
package com.apogeo;
/
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class ciao extends TagSupport {
private String name=null;
public void setName(String value){
name = value;
}
public String getName(){
return(name);
}
public int doStartTag() {
try {
JspWriter out = pageContext.getOut();
out.println("");
if (name != null)
out.println("<p align=\"center\"><Font color=\"ff0000\"><strong>Ciao <Font color=\"000000\">" + name + "</Font>, questa riga è generata dalla Tag Library</strong></font></p>");
else
out.println("Errore, manca il parametro corretto!");
}
catch (Exception ex) {
throw new Error("Errore");
}
return SKIP_BODY;
}
public int doEndTag(){
try {
JspWriter out = pageContext.getOut();
out.println("</td></tr>");
}
catch (Exception ex){
throw new Error("Errore");
}
return 0;
}
}Compilandolo si ottiene la classe che ci serve, il file ciao.class.
Pubblicando il tutto sull'application server si ottiene il seguente risultato:
(Ingrandimento) Come si può vedere nella pagina JSP si utilizza un tag proprietario che ha un'implementazione nella classe indicata all'interno del file di definizione della libreria.
In questo modo si ottiene una separazione tra la posizione del tag all'interno della pagina, la sua definizione formale, la sua implementazione e la logica di business che può essere inserita all'interno di beans separati.



