Codice completo

Listato 5. Definizione tag handler del nuovo esempio

package it.html.customtag;
import java.util.Collection;
import java.util.Iterator;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

/**
* @author Pasquale Congiustì
* La classe SelectTag definisce la logica per la produzione di componenti select box
*/

public class SelectTag extends TagSupport {

    /*
    * <select name=...   *
    */
    
    private String selectName;
    
    /**
    *class=... </select>
    */
    
    private String className;
    private Collection list;
    
    /**
    * Metodi getter and setter
    */
    
    public String getSelectName() {
        return selectName;
    }
    
    public void setSelectName(String value) {
        this.selectName = value;
    }
    
    public String getClassName() {
        return className;
    }
    
    public void setClassName(String className) {
        this.className = className;
    }
    
    public void setList(Collection value){
        this.list = value;
    }
    
    public Collection getList(){
        return list;
    }
    
    /**
    * Il metodo viene invocato dal container quando viene incontrato il tag xml
    */
    
    public int doStartTag() {
        try {
            JspWriter out = pageContext.getOut();
            out.println("<select name=\""+selectName+"\" class=\""+className+"\">");
            
            //Viene effettuata una iterazione su tutti gli elementi recuperati nella lista
        
            if (list!=null){
                Iterator it=list.iterator();
                while(it.hasNext()){
                    Selectable s=(Selectable)it.next();
                    out.println("<option value=\""+s.getValueID()+"\">"+s.getValueName()+"</option>");
                }
            }
        } 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("</select>");
        } catch (Exception e){
            e.printStackTrace();
        }
        
        //Continua a valutare il resto della pagina
        
        return TagSupport.EVAL_PAGE;
    }
}