Codice completo

Listato 3. Definizione di un tag handler

package it.html.customtag;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

/**
* @author Pasquale Congiustì *
* La classe HelloTag definisce la logica per la produzione di un semplice custom tag
* che riproduce a video un messaggio di saluto
*/

public class HelloTag extends TagSupport {

    /**
    * L'attributo viene utilizzato per definire uno stile
    */

    private String className;

    /**
    * L'attributo viene utilizzato per definire il nome utente
    */

    private String nome;

    /**
    * Metodi getter and setter
    */

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public void setNome(String value){
        this.nome = value;
    }

    public String getNome(){
        return(nome);
    }

    /**
    * Il metodo viene invocato dal container quando viene incontrato il tag xml
    */

    public int doStartTag() {
        try {
            //Recupero lo stream di output e scrivo il contenuto personalizzato
            JspWriter out = pageContext.getOut();
        
            //L'attributo className è definito obbligatorio nel tld
            out.println("<div class=\""+className+"\">");
            if (nome != null)
                out.println("Ciao <b>" + nome + "</b>, questo è il tuo primo <i>Custom Tag</i>");
            else
                out.println("Ciao a tutti!!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        /**
        * Non c'è contenuto da elaborare all'interno del tag
        * quindi restituiamo il codice SKIP_BODY.
        */
    
        return TagSupport.SKIP_BODY;
    }

    /**
    * Il metodo viene invocato alla chiusura del tag
    */

    public int doEndTag(){
        try {
            JspWriter out = pageContext.getOut();
            out.println("</div>");
        } catch (Exception e){
            e.printStackTrace();
        }
    
        //Continua a valutare il resto della pagina
    
        return TagSupport.EVAL_PAGE;
    }
}