Home| New Wiki | | Login | User registry | Home Tree PDF
Tag Libraries
Owner:csilva, Version: 2, Date:Tue 06, September 2005,

related to this example is Tag Check.

Simple Taglib. Shows options inside a SELECT html component.

Jakarta Struts has already a tag that represents a SELECT tag. This is similar but simpler.

Listing 1: SelectOptionsTag.java

 package tags;
 
 import java.awt.Point;
 import java.lang.reflect.Method;
 import java.text.MessageFormat;
 import java.util.Iterator;
 import java.util.List;
 
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.tagext.TagSupport;
 
 /**
  * SelectOptionsTag
  * para usarlo debe definirse un archivo TLD
  * 
  * 
  * Y usarlo en el .JSP
  * <pre>
  * <%@ taglib uri="/WEB-INF/tags.tld" prefix="usertags" %>
  * ...
  * <usertags:options 
  *    list="<%=(java.util.List) %>" 
  *    value="property" 
  *    name="property" 
  *    select="default_value"/>
  * </pre>
  * 
  * Si no se usa value o property se asume el valor contenido en la lista.
  * @author csilva
  * @version 
  */
 public class SelectOptionsTag extends TagSupport {
   /// Lista de datos a usar como opciones
   List list;
   /// Propiedad usada para mostrar el Nombre (texto) de la opcion
   String name;
   /// Propiedad usada para mostrar el Nombre (texto) de la opcion
   String value;
   /// marcar seleccionado un valor por omision
   String select;
   
   static final boolean DEBUG=false;
   void log(String s){
     if (DEBUG) {    
       System.out.print("SelectOptionsTag: ");
       System.out.println(s);
     }
   }
   
   /**
    * @param list
    */
   public void setList(List list) {
     this.list = list;
   }
 
   /**
    * @param string
    */
   public void setName(String string) {
     name = "get" + string.substring(0, 1).toUpperCase() + string.substring(1);
   }
 
   /**
    * @param string
    */
   public void setSelect(String string) {
     select = string;
   }
 
   /**
    * @param string
    */
   public void setValue(String string) {
     value = "get" + string.substring(0, 1).toUpperCase() + string.substring(1);
   }
 
   /**
    * 
    * @see javax.servlet.jsp.tagext.Tag#doEndTag()
    */
   public int doEndTag() throws JspException {
     try {
       String pattern = "<option value="{0}" {2}>{1}</option>rn";
       Method getValue = null;
       Method getName = null;
       Object[] noValues = new Object[0];
       Class[] noArgs = new Class[0];
       for (Iterator i = list.iterator(); i.hasNext();) {
         Object b = i.next();
         String val = null, nam = null, sel = "";
 
         if (b != null) {
           log("option: ("+b.getClass().getName()+") "+b);
           if (name != null) {
             if (getName == null) {
               getName = b.getClass().getMethod(name, noArgs);
               log(name+"(): "+getName.getReturnType());
             }
             Object o = getName.invoke(b, noValues);
             log("name: ("+o.getClass().getName()+") "+o);
             nam = o.toString();
           } else
             nam = String.valueOf(b);
           
           if (value != null) {
             if (getValue == null) {            
               getValue = b.getClass().getMethod(value, noArgs);
               log(value+"(): "+getValue.getReturnType());
             }
             Object o = getValue.invoke(b, noValues);
                         
             log("value: ("+o.getClass().getName()+") "+o);
             val = o.toString();
             
           } else
             val = String.valueOf(b);
 
         } else {
           nam = val = "";
         }
 
         if (val.equals(select))
           sel = "selected";
         String html = MessageFormat.format(pattern, new Object[] { val, nam, sel });
         pageContext.getOut().print(html);
       }
     } catch (Exception ioe) {
       throw new JspException("Error al escribir en la pagina:" + ioe.getMessage());
     }
     return super.doEndTag();
   }
 }

Listado 2: tags.tld

 <?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> 
 <tlib-version>1.2</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>SelectOptions Tags</short-name>
 <tag>
    <name>options</name>
    <tag-class>tags.SelectOptionsTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
       <name>list</name>
       <required>true</required>
       <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
       <name>name</name>
       <required>false</required>
       <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
       <name>value</name>
       <required>false</required>
       <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
       <name>select</name>
       <required>false</required>
       <rtexprvalue>true</rtexprvalue>
    </attribute>
 </tag>
 </taglib>

Listado 3: test.jsp

<%@ taglib uri="/WEB-INF/tags.tld" prefix="usertags" %>
<%
 java.util.Vector v = new java.util.Vector();
 v.add(new java.awt.Point(1,11));
 v.add(new java.awt.Point(2,21));
 v.add(new java.awt.Point(3,31));
%>
<select name="test">
  <usertags:options list="<%=v%>" value="x" name="y" select="2.0"/>
</select>

Nota: se usa select=2.0 debido a que la funcion getX() de java.awt.Point retorna un double (no un int como el campo x).


Edit - History - Extract PDF - Extract Tree as PDF

Last Modified

Thu, Nov 19 Sat, Oct 3 Fri, Sep 25 Mon, Aug 3 Mon, Apr 27 Sat, Mar 28 Mon, Jan 19 Tue, Jan 6

Home| New Wiki