You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by oa...@apache.org on 2001/07/24 13:42:15 UTC

cvs commit: jakarta-struts/src/share/org/apache/struts/taglib/html SubmitTag.java SelectTag.java LocalStrings.properties LinkTag.java CheckboxTag.java ButtonTag.java BaseHandlerTag.java BaseFieldTag.java

oalexeev    01/07/24 04:42:15

  Modified:    src/share/org/apache/struts/taglib/html SubmitTag.java
                        SelectTag.java LocalStrings.properties LinkTag.java
                        CheckboxTag.java ButtonTag.java BaseHandlerTag.java
                        BaseFieldTag.java
  Log:
  Add support for indexed tags in html taglib.
  Submitted by David Hay
  
  Revision  Changes    Path
  1.4       +47 -44    jakarta-struts/src/share/org/apache/struts/taglib/html/SubmitTag.java
  
  Index: SubmitTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/SubmitTag.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SubmitTag.java	2001/04/18 01:31:15	1.3
  +++ SubmitTag.java	2001/07/24 11:42:15	1.4
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/SubmitTag.java,v 1.3 2001/04/18 01:31:15 craigmcc Exp $
  - * $Revision: 1.3 $
  - * $Date: 2001/04/18 01:31:15 $
  + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/SubmitTag.java,v 1.4 2001/07/24 11:42:15 oalexeev Exp $
  + * $Revision: 1.4 $
  + * $Date: 2001/07/24 11:42:15 $
    *
    * ====================================================================
    *
  @@ -70,13 +70,14 @@
   import javax.servlet.jsp.JspWriter;
   import org.apache.struts.util.MessageResources;
   import org.apache.struts.util.ResponseUtils;
  +import org.apache.struts.util.RequestUtils;
  +import org.apache.struts.taglib.logic.IterateTag;
   
  -
   /**
    * Tag for input fields of type "submit".
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.3 $ $Date: 2001/04/18 01:31:15 $
  + * @version $Revision: 1.4 $ $Date: 2001/07/24 11:42:15 $
    */
   
   public class SubmitTag extends BaseHandlerTag {
  @@ -118,7 +119,7 @@
        */
       public String getProperty() {
   
  -	return (this.property);
  +        return (this.property);
   
       }
   
  @@ -130,7 +131,7 @@
        */
       public void setProperty(String property) {
          
  -	this.property = property;
  +        this.property = property;
   
       }
   
  @@ -140,7 +141,7 @@
        */
       public String getValue() {
   
  -	return (this.value);
  +        return (this.value);
   
       }
   
  @@ -152,7 +153,7 @@
        */
       public void setValue(String value) {
   
  -	this.value = value;
  +        this.value = value;
   
       }
   
  @@ -167,9 +168,9 @@
        */
       public int doStartTag() throws JspException {
   
  -	// Do nothing until doEndTag() is called
  +        // Do nothing until doEndTag() is called
           this.text = null;
  -	return (EVAL_BODY_TAG);
  +        return (EVAL_BODY_TAG);
   
       }
   
  @@ -199,40 +200,42 @@
        */
       public int doEndTag() throws JspException {
   
  -	// Acquire the label value we will be generating
  -	String label = value;
  -	if ((label == null) && (text != null))
  -	    label = text;
  -	if ((label == null) || (label.length() < 1))
  -	    label = "Submit";
  -
  -	// Generate an HTML element
  -	StringBuffer results = new StringBuffer();
  -	results.append("<input type=\"submit\" name=\"");
  -	results.append(property);
  -	results.append("\"");
  -	if (accesskey != null) {
  -	    results.append(" accesskey=\"");
  -	    results.append(accesskey);
  -	    results.append("\"");
  -	}
  -	if (tabindex != null) {
  -	    results.append(" tabindex=\"");
  -	    results.append(tabindex);
  -	    results.append("\"");
  -	}
  -	results.append(" value=\"");
  -	results.append(label);
  -	results.append("\"");
  -	results.append(prepareEventHandlers());
  -	results.append(prepareStyles());
  -	results.append(">");
  +        // Acquire the label value we will be generating
  +        String label = value;
  +        if ((label == null) && (text != null))
  +            label = text;
  +        if ((label == null) || (label.length() < 1))
  +            label = "Submit";
  +
  +        // Generate an HTML element
  +        StringBuffer results = new StringBuffer();
  +        results.append("<input type=\"submit\" name=\"");
  +        results.append(property);
  +        if( indexed ) 
  +                prepareIndex( results, null );
  +        results.append("\"");
  +        if (accesskey != null) {
  +            results.append(" accesskey=\"");
  +            results.append(accesskey);
  +            results.append("\"");
  +        }
  +        if (tabindex != null) {
  +            results.append(" tabindex=\"");
  +            results.append(tabindex);
  +            results.append("\"");
  +        }
  +        results.append(" value=\"");
  +        results.append(label);
  +        results.append("\"");
  +        results.append(prepareEventHandlers());
  +        results.append(prepareStyles());
  +        results.append(">");
   
  -	// Render this element to our writer
  +        // Render this element to our writer
           ResponseUtils.write(pageContext, results.toString());
   
           // Evaluate the remainder of this page
  -	return (EVAL_PAGE);
  +        return (EVAL_PAGE);
   
       }
   
  @@ -242,10 +245,10 @@
        */
       public void release() {
   
  -	super.release();
  -	property = "submit";
  +        super.release();
  +        property = "submit";
           text = null;
  -	value = null;
  +        value = null;
   
       }
   
  
  
  
  1.7       +85 -83    jakarta-struts/src/share/org/apache/struts/taglib/html/SelectTag.java
  
  Index: SelectTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/SelectTag.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SelectTag.java	2001/07/16 00:44:55	1.6
  +++ SelectTag.java	2001/07/24 11:42:15	1.7
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/SelectTag.java,v 1.6 2001/07/16 00:44:55 craigmcc Exp $
  - * $Revision: 1.6 $
  - * $Date: 2001/07/16 00:44:55 $
  + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/SelectTag.java,v 1.7 2001/07/24 11:42:15 oalexeev Exp $
  + * $Revision: 1.7 $
  + * $Date: 2001/07/24 11:42:15 $
    *
    * ====================================================================
    *
  @@ -81,7 +81,7 @@
    * inside a form tag.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.6 $ $Date: 2001/07/16 00:44:55 $
  + * @version $Revision: 1.7 $ $Date: 2001/07/24 11:42:15 $
    */
   
   public class SelectTag extends BaseHandlerTag {
  @@ -110,11 +110,11 @@
       protected String multiple = null;
   
       public String getMultiple() {
  -	return (this.multiple);
  +        return (this.multiple);
       }
   
       public void setMultiple(String multiple) {
  -	this.multiple = multiple;
  +        this.multiple = multiple;
       }
   
   
  @@ -124,11 +124,11 @@
       protected String name = Constants.BEAN_KEY;
   
       public String getName() {
  -	return (this.name);
  +        return (this.name);
       }
   
       public void setName(String name) {
  -	this.name = name;
  +        this.name = name;
       }
   
   
  @@ -151,11 +151,11 @@
       protected String size = null;
   
       public String getSize() {
  -	return (this.size);
  +        return (this.size);
       }
   
       public void setSize(String size) {
  -	this.size = size;
  +        this.size = size;
       }
   
   
  @@ -191,7 +191,7 @@
        */
       public String getProperty() {
   
  -	return (this.property);
  +        return (this.property);
   
       }
   
  @@ -203,7 +203,7 @@
        */
       public void setProperty(String property) {
   
  -	this.property = property;
  +        this.property = property;
   
       }
   
  @@ -213,7 +213,7 @@
        */
       public String getValue() {
   
  -	return (this.value);
  +        return (this.value);
   
       }
   
  @@ -225,7 +225,7 @@
        */
       public void setValue(String value) {
   
  -	this.value = value;
  +        this.value = value;
   
       }
   
  @@ -240,74 +240,76 @@
        */
       public int doStartTag() throws JspException {
   
  -	// Create an appropriate "form" element based on our parameters
  -	StringBuffer results = new StringBuffer("<select");
  -	results.append(" name=\"");
  -	results.append(property);
  -	results.append("\"");
  -	if (accesskey != null) {
  -	    results.append(" accesskey=\"");
  -	    results.append(accesskey);
  -	    results.append("\"");
  -	}
  -	if (multiple != null) {
  -	    results.append(" multiple=\"multiple\"");
  -	}
  -	if (size != null) {
  -	    results.append(" size=\"");
  -	    results.append(size);
  -	    results.append("\"");
  -	}
  -	if (tabindex != null) {
  -	    results.append(" tabindex=\"");
  -	    results.append(tabindex);
  -	    results.append("\"");
  -	}
  -	results.append(prepareEventHandlers());
  -	results.append(prepareStyles());
  -	results.append(">");
  +        // Create an appropriate "form" element based on our parameters
  +        StringBuffer results = new StringBuffer("<select");
  +        results.append(" name=\"");
  +        if( indexed )
  +                prepareIndex( results, name );
  +        results.append(property);
  +        results.append("\"");
  +        if (accesskey != null) {
  +            results.append(" accesskey=\"");
  +            results.append(accesskey);
  +            results.append("\"");
  +        }
  +        if (multiple != null) {
  +            results.append(" multiple=\"multiple\"");
  +        }
  +        if (size != null) {
  +            results.append(" size=\"");
  +            results.append(size);
  +            results.append("\"");
  +        }
  +        if (tabindex != null) {
  +            results.append(" tabindex=\"");
  +            results.append(tabindex);
  +            results.append("\"");
  +        }
  +        results.append(prepareEventHandlers());
  +        results.append(prepareStyles());
  +        results.append(">");
   
  -	// Print this field to our output writer
  +        // Print this field to our output writer
           ResponseUtils.write(pageContext, results.toString());
   
  -	// Store this tag itself as a page attribute
  -	pageContext.setAttribute(Constants.SELECT_KEY, this);
  +        // Store this tag itself as a page attribute
  +        pageContext.setAttribute(Constants.SELECT_KEY, this);
   
  -	// Calculate the match values we will actually be using
  -	if (value != null) {
  -	    match = new String[1];
  +        // Calculate the match values we will actually be using
  +        if (value != null) {
  +            match = new String[1];
               match[0] = value;
           } else {
  -	    Object bean = pageContext.findAttribute(name);
  -	    if (bean == null) {
  +            Object bean = pageContext.findAttribute(name);
  +            if (bean == null) {
                   JspException e = new JspException                    
  -		    (messages.getMessage("getter.bean", name));
  +                    (messages.getMessage("getter.bean", name));
                   RequestUtils.saveException(pageContext, e);
                   throw e;
               }
  -	    try {
  -		match = BeanUtils.getArrayProperty(bean, property);
  -		if (match == null)
  -		    match = new String[0];
  -	    } catch (IllegalAccessException e) {
  +            try {
  +                match = BeanUtils.getArrayProperty(bean, property);
  +                if (match == null)
  +                    match = new String[0];
  +            } catch (IllegalAccessException e) {
                   RequestUtils.saveException(pageContext, e);
                   throw new JspException
  -		    (messages.getMessage("getter.access", property, name));
  -	    } catch (InvocationTargetException e) {
  -		Throwable t = e.getTargetException();
  +                    (messages.getMessage("getter.access", property, name));
  +            } catch (InvocationTargetException e) {
  +                Throwable t = e.getTargetException();
                   RequestUtils.saveException(pageContext, t);
  -		throw new JspException
  -		    (messages.getMessage("getter.result",
  -					 property, t.toString()));
  -	    } catch (NoSuchMethodException e) {
  +                throw new JspException
  +                    (messages.getMessage("getter.result",
  +                                         property, t.toString()));
  +            } catch (NoSuchMethodException e) {
                   RequestUtils.saveException(pageContext, e);
                   throw new JspException
  -		    (messages.getMessage("getter.method", property, name));
  -	    }
  -	}
  +                    (messages.getMessage("getter.method", property, name));
  +            }
  +        }
   
  -	// Continue processing this page
  -	return (EVAL_BODY_TAG);
  +        // Continue processing this page
  +        return (EVAL_BODY_TAG);
   
       }
   
  @@ -339,20 +341,20 @@
        */
       public int doEndTag() throws JspException {
   
  -	// Remove the page scope attributes we created
  -	pageContext.removeAttribute(Constants.SELECT_KEY);
  +        // Remove the page scope attributes we created
  +        pageContext.removeAttribute(Constants.SELECT_KEY);
   
  -	// Render a tag representing the end of our current form
  -	StringBuffer results = new StringBuffer();
  -	if (saveBody != null)
  -	    results.append(saveBody);
  -	results.append("</select>");
  +        // Render a tag representing the end of our current form
  +        StringBuffer results = new StringBuffer();
  +        if (saveBody != null)
  +            results.append(saveBody);
  +        results.append("</select>");
   
  -	// Print this value to our output writer
  +        // Print this value to our output writer
           ResponseUtils.write(pageContext, results.toString());
   
  -	// Continue processing this page
  -	return (EVAL_PAGE);
  +        // Continue processing this page
  +        return (EVAL_PAGE);
   
       }
   
  @@ -362,14 +364,14 @@
        */
       public void release() {
   
  -	super.release();
  -	match = null;
  -	multiple = null;
  -	name = Constants.BEAN_KEY;
  -	property = null;
  +        super.release();
  +        match = null;
  +        multiple = null;
  +        name = Constants.BEAN_KEY;
  +        property = null;
           saveBody = null;
  -	size = null;
  -	value = null;
  +        size = null;
  +        value = null;
   
       }
   
  
  
  
  1.11      +1 -0      jakarta-struts/src/share/org/apache/struts/taglib/html/LocalStrings.properties
  
  Index: LocalStrings.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/LocalStrings.properties,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- LocalStrings.properties	2001/07/12 05:24:19	1.10
  +++ LocalStrings.properties	2001/07/24 11:42:15	1.11
  @@ -37,3 +37,4 @@
   optionsTag.iterator=Cannot create iterator for {0}
   optionsTag.select=Options tag must be nested in a Select tag
   rewrite.url=Cannot create rewrite URL: {0}
  +indexed.noEnclosingIterate=indexed=\"true\" is only valid within an enclosing iterate tag
  
  
  
  1.17      +73 -37    jakarta-struts/src/share/org/apache/struts/taglib/html/LinkTag.java
  
  Index: LinkTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/LinkTag.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- LinkTag.java	2001/06/11 17:40:30	1.16
  +++ LinkTag.java	2001/07/24 11:42:15	1.17
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/LinkTag.java,v 1.16 2001/06/11 17:40:30 craigmcc Exp $
  - * $Revision: 1.16 $
  - * $Date: 2001/06/11 17:40:30 $
  + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/LinkTag.java,v 1.17 2001/07/24 11:42:15 oalexeev Exp $
  + * $Revision: 1.17 $
  + * $Date: 2001/07/24 11:42:15 $
    *
    * ====================================================================
    *
  @@ -70,6 +70,7 @@
   import java.net.URLEncoder;
   import java.util.Iterator;
   import java.util.Map;
  +import java.util.HashMap;
   import javax.servlet.ServletContext;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
  @@ -83,13 +84,13 @@
   import org.apache.struts.util.MessageResources;
   import org.apache.struts.util.RequestUtils;
   import org.apache.struts.util.ResponseUtils;
  +import org.apache.struts.taglib.logic.IterateTag;
   
  -
   /**
    * Generate a URL-encoded hyperlink to the specified URI.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.16 $ $Date: 2001/06/11 17:40:30 $
  + * @version $Revision: 1.17 $ $Date: 2001/07/24 11:42:15 $
    */
   
   public class LinkTag extends BaseHandlerTag {
  @@ -127,11 +128,11 @@
       protected String forward = null;
   
       public String getForward() {
  -	return (this.forward);
  +        return (this.forward);
       }
   
       public void setForward(String forward) {
  -	this.forward = forward;
  +        this.forward = forward;
       }
   
   
  @@ -141,11 +142,11 @@
       protected String href = null;
   
       public String getHref() {
  -	return (this.href);
  +        return (this.href);
       }
   
       public void setHref(String href) {
  -	this.href = href;
  +        this.href = href;
       }
   
   
  @@ -176,11 +177,11 @@
       protected String name = null;
   
       public String getName() {
  -	return (this.name);
  +        return (this.name);
       }
   
       public void setName(String name) {
  -	this.name = name;
  +        this.name = name;
       }
   
   
  @@ -261,11 +262,11 @@
       protected String property = null;
   
       public String getProperty() {
  -	return (this.property);
  +        return (this.property);
       }
   
       public void setProperty(String property) {
  -	this.property = property;
  +        this.property = property;
       }
   
   
  @@ -289,11 +290,11 @@
       protected String target = null;
   
       public String getTarget() {
  -	return (this.target);
  +        return (this.target);
       }
   
       public void setTarget(String target) {
  -	this.target = target;
  +        this.target = target;
       }
   
   
  @@ -310,6 +311,18 @@
           this.transaction = transaction;
       }
   
  +    /**
  +     * Name of parameter to generate to hold index number
  +     */
  +    protected String indexId = null;
  +
  +    public String getIndexId() {
  +       return (this.indexId);
  +    }
  +
  +    public void setIndexId(String indexId) {
  +        this.indexId = indexId;
  +    }
   
       // --------------------------------------------------------- Public Methods
   
  @@ -330,10 +343,33 @@
               return (EVAL_BODY_TAG);
           }
   
  -	// Generate the hyperlink URL
  +        // Generate the hyperlink URL
           Map params = RequestUtils.computeParameters
               (pageContext, paramId, paramName, paramProperty, paramScope,
                name, property, scope, transaction);
  +
  +        //if "indexed=true", add "index=x" parameter to query string 
  +        if( indexed ) {
  +           // look for outer iterate tag
  +           IterateTag iterateTag = (IterateTag) findAncestorWithClass(this, IterateTag.class);
  +           if (iterateTag == null) {
  +              // this tag should only be nested in iteratetag, if it's not, throw exception
  +              JspException e = new JspException(messages.getMessage("indexed.noEnclosingIterate"));
  +              RequestUtils.saveException(pageContext, e);
  +              throw e;
  +           }
  +
  +           //calculate index, and add as a parameter
  +           if (params == null) {
  +               params = new HashMap();             //create new HashMap if no other params
  +           }
  +           if (indexId != null) {
  +            params.put(indexId, Integer.toString(iterateTag.getIndex()));
  +           } else {
  +              params.put("index", Integer.toString(iterateTag.getIndex()));
  +           }
  +        }
  +        
           String url = null;
           try {
               url = RequestUtils.computeURL(pageContext, forward, href,
  @@ -348,21 +384,21 @@
           StringBuffer results = new StringBuffer("<a href=\"");
           results.append(url);
           results.append("\"");
  -	if (target != null) {
  -	    results.append(" target=\"");
  -	    results.append(target);
  -	    results.append("\"");
  -	}
  +        if (target != null) {
  +            results.append(" target=\"");
  +            results.append(target);
  +            results.append("\"");
  +        }
           results.append(prepareStyles());
           results.append(prepareEventHandlers());
  -	results.append(">");
  +        results.append(">");
   
  -	// Print this element to our output writer
  +        // Print this element to our output writer
           ResponseUtils.write(pageContext, results.toString());
   
  -	// Evaluate the body of this tag
  +        // Evaluate the body of this tag
           this.text = null;
  -	return (EVAL_BODY_TAG);
  +        return (EVAL_BODY_TAG);
   
       }
   
  @@ -398,11 +434,11 @@
               results.append(text);
           results.append("</a>");
   
  -	// Render the remainder to the output stream
  +        // Render the remainder to the output stream
           ResponseUtils.write(pageContext, results.toString());
   
           // Evaluate the remainder of this page
  -	return (EVAL_PAGE);
  +        return (EVAL_PAGE);
   
       }
   
  @@ -412,20 +448,20 @@
        */
       public void release() {
   
  -	super.release();
  +        super.release();
           anchor = null;
  -	forward = null;
  -	href = null;
  +        forward = null;
  +        href = null;
           linkName = null;
  -	name = null;
  +        name = null;
           page = null;
  -	paramId = null;
  -	paramName = null;
  -	paramProperty = null;
  -	paramScope = null;
  -	property = null;
  +        paramId = null;
  +        paramName = null;
  +        paramProperty = null;
  +        paramScope = null;
  +        property = null;
           scope = null;
  -	target = null;
  +        target = null;
           text = null;
           transaction = false;
   
  
  
  
  1.7       +40 -38    jakarta-struts/src/share/org/apache/struts/taglib/html/CheckboxTag.java
  
  Index: CheckboxTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/CheckboxTag.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- CheckboxTag.java	2001/06/10 03:53:31	1.6
  +++ CheckboxTag.java	2001/07/24 11:42:15	1.7
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/CheckboxTag.java,v 1.6 2001/06/10 03:53:31 craigmcc Exp $
  - * $Revision: 1.6 $
  - * $Date: 2001/06/10 03:53:31 $
  + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/CheckboxTag.java,v 1.7 2001/07/24 11:42:15 oalexeev Exp $
  + * $Revision: 1.7 $
  + * $Date: 2001/07/24 11:42:15 $
    *
    * ====================================================================
    *
  @@ -76,7 +76,7 @@
    * Tag for input fields of type "checkbox".
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.6 $ $Date: 2001/06/10 03:53:31 $
  + * @version $Revision: 1.7 $ $Date: 2001/07/24 11:42:15 $
    */
   
   public class CheckboxTag extends BaseHandlerTag {
  @@ -98,11 +98,11 @@
       protected String name = Constants.BEAN_KEY;
   
       public String getName() {
  -	return (this.name);
  +        return (this.name);
       }
   
       public void setName(String name) {
  -	this.name = name;
  +        this.name = name;
       }
   
   
  @@ -132,7 +132,7 @@
        */
       public String getProperty() {
   
  -	return (this.property);
  +        return (this.property);
   
       }
   
  @@ -144,7 +144,7 @@
        */
       public void setProperty(String property) {
   
  -	this.property = property;
  +        this.property = property;
   
       }
   
  @@ -154,7 +154,7 @@
        */
       public String getValue() {
   
  -	return (this.value);
  +        return (this.value);
   
       }
   
  @@ -166,7 +166,7 @@
        */
       public void setValue(String value) {
   
  -	this.value = value;
  +        this.value = value;
   
       }
   
  @@ -181,21 +181,23 @@
        */
       public int doStartTag() throws JspException {
   
  -	// Create an appropriate "input" element based on our parameters
  -	StringBuffer results = new StringBuffer("<input type=\"checkbox\"");
  -	results.append(" name=\"");
  -	results.append(this.property);
  -	results.append("\"");
  -	if (accesskey != null) {
  -	    results.append(" accesskey=\"");
  -	    results.append(accesskey);
  -	    results.append("\"");
  -	}
  -	if (tabindex != null) {
  -	    results.append(" tabindex=\"");
  -	    results.append(tabindex);
  -	    results.append("\"");
  -	}
  +        // Create an appropriate "input" element based on our parameters
  +        StringBuffer results = new StringBuffer("<input type=\"checkbox\"");
  +        results.append(" name=\"");
  +        if( indexed ) 
  +                prepareIndex( results, name );
  +        results.append(this.property);
  +        results.append("\"");
  +        if (accesskey != null) {
  +            results.append(" accesskey=\"");
  +            results.append(accesskey);
  +            results.append("\"");
  +        }
  +        if (tabindex != null) {
  +            results.append(" tabindex=\"");
  +            results.append(tabindex);
  +            results.append("\"");
  +        }
           results.append(" value=\"");
           if (value == null)
               results.append("on");
  @@ -209,20 +211,20 @@
           if (!(result instanceof String))
               result = result.toString();
           String checked = (String) result;
  -	if (checked.equalsIgnoreCase("true")
  +        if (checked.equalsIgnoreCase("true")
               || checked.equalsIgnoreCase("yes")
  -	    || checked.equalsIgnoreCase("on"))
  -	    results.append(" checked=\"checked\"");
  -	results.append(prepareEventHandlers());
  -	results.append(prepareStyles());
  -	results.append(">");
  +            || checked.equalsIgnoreCase("on"))
  +            results.append(" checked=\"checked\"");
  +        results.append(prepareEventHandlers());
  +        results.append(prepareStyles());
  +        results.append(">");
   
  -	// Print this field to our output writer
  +        // Print this field to our output writer
           ResponseUtils.write(pageContext, results.toString());
   
  -	// Continue processing this page
  +        // Continue processing this page
           this.text = null;
  -	return (EVAL_BODY_TAG);
  +        return (EVAL_BODY_TAG);
   
       }
   
  @@ -267,11 +269,11 @@
        */
       public void release() {
   
  -	super.release();
  -	name = Constants.BEAN_KEY;
  -	property = null;
  +        super.release();
  +        name = Constants.BEAN_KEY;
  +        property = null;
           text = null;
  -	value = null;
  +        value = null;
   
       }
   
  
  
  
  1.5       +9 -7      jakarta-struts/src/share/org/apache/struts/taglib/html/ButtonTag.java
  
  Index: ButtonTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/ButtonTag.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ButtonTag.java	2001/06/01 17:13:36	1.4
  +++ ButtonTag.java	2001/07/24 11:42:15	1.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/ButtonTag.java,v 1.4 2001/06/01 17:13:36 craigmcc Exp $
  - * $Revision: 1.4 $
  - * $Date: 2001/06/01 17:13:36 $
  + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/ButtonTag.java,v 1.5 2001/07/24 11:42:15 oalexeev Exp $
  + * $Revision: 1.5 $
  + * $Date: 2001/07/24 11:42:15 $
    *
    * ====================================================================
    *
  @@ -74,7 +74,7 @@
    * Renders an HTML BUTTON tag within the Struts framework.
    *
    * @author Don Clasen
  - * @version $Revision: 1.4 $ $Date: 2001/06/01 17:13:36 $
  + * @version $Revision: 1.5 $ $Date: 2001/07/24 11:42:15 $
    */
   
   public class ButtonTag extends BaseHandlerTag {
  @@ -188,6 +188,8 @@
           if (property != null) {
               results.append(" name=\"");
               results.append(property);
  +            if( indexed )
  +                prepareIndex( results, null );
               results.append("\"");
           }
           if (accesskey != null) {
  @@ -221,10 +223,10 @@
        */
       public void release() {
   
  -	super.release();
  -	property = null;
  +        super.release();
  +        property = null;
           text = null;
  -	value = null;
  +        value = null;
   
       }
   
  
  
  
  1.8       +72 -27    jakarta-struts/src/share/org/apache/struts/taglib/html/BaseHandlerTag.java
  
  Index: BaseHandlerTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/BaseHandlerTag.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- BaseHandlerTag.java	2001/06/21 16:18:17	1.7
  +++ BaseHandlerTag.java	2001/07/24 11:42:15	1.8
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/BaseHandlerTag.java,v 1.7 2001/06/21 16:18:17 craigmcc Exp $
  - * $Revision: 1.7 $
  - * $Date: 2001/06/21 16:18:17 $
  + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/BaseHandlerTag.java,v 1.8 2001/07/24 11:42:15 oalexeev Exp $
  + * $Revision: 1.8 $
  + * $Date: 2001/07/24 11:42:15 $
    *
    * ====================================================================
    *
  @@ -61,8 +61,11 @@
   
   package org.apache.struts.taglib.html;
   
  +import javax.servlet.jsp.JspException;
   import javax.servlet.jsp.tagext.BodyTagSupport;
   import org.apache.struts.util.MessageResources;
  +import org.apache.struts.util.RequestUtils;
  +import org.apache.struts.taglib.logic.IterateTag;
   
   /**
    * Base class for tags that render form elements capable of including JavaScript
  @@ -71,7 +74,7 @@
    * appropriate implementations of these.
    *
    * @author Don Clasen
  - * @version $Revision: 1.7 $ $Date: 2001/06/21 16:18:17 $
  + * @version $Revision: 1.8 $ $Date: 2001/07/24 11:42:15 $
    */
   
   public abstract class BaseHandlerTag extends BodyTagSupport {
  @@ -95,6 +98,11 @@
       /** Tab index value. */
       protected String tabindex = null;
   
  +//  Indexing ability for Iterate
  +
  +    /** Whether to created indexed names for fields */
  +    protected boolean indexed = false;
  +
   //  Mouse Events
   
       /** Mouse click event. */
  @@ -174,25 +182,37 @@
   
       /** Sets the accessKey character. */
       public void setAccesskey(String accessKey) {
  -	this.accesskey = accessKey;
  +        this.accesskey = accessKey;
       }
   
       /** Returns the accessKey character. */
       public String getAccesskey() {
  -	return (this.accesskey);
  +        return (this.accesskey);
       }
   
   
       /** Sets the tabIndex value. */
       public void setTabindex(String tabIndex) {
  -	this.tabindex = tabIndex;
  +        this.tabindex = tabIndex;
       }
   
       /** Returns the tabIndex value. */
       public String getTabindex() {
  -	return (this.tabindex);
  +        return (this.tabindex);
       }
   
  +//  Indexing ability for Iterate
  +    
  +    /** Sets the indexed value. */
  +    public void setIndexed(boolean indexed) {
  +        this.indexed = indexed;
  +    }
  +
  +    /** Returns the indexed value. */
  +    public boolean getIndexed() {
  +        return (this.indexed);
  +    }
  +
   // Mouse Events
   
       /** Sets the onClick event handler. */
  @@ -414,35 +434,60 @@
        */
       public void release() {
   
  -	super.release();
  -	accesskey = null;
  -	tabindex = null;
  -	onclick = null;
  -	ondblclick = null;
  -	onmouseover = null;
  -	onmouseout = null;
  -	onmousemove = null;
  -	onmousedown = null;
  -	onmouseup = null;
  -	onkeydown = null;
  -	onkeyup = null;
  -	onkeypress = null;
  -	onselect = null;
  -	onchange = null;
  -	onblur = null;
  -	onfocus = null;
  +        super.release();
  +        accesskey = null;
  +        tabindex = null;
  +        onclick = null;
  +        ondblclick = null;
  +        onmouseover = null;
  +        onmouseout = null;
  +        onmousemove = null;
  +        onmousedown = null;
  +        onmouseup = null;
  +        onkeydown = null;
  +        onkeyup = null;
  +        onkeypress = null;
  +        onselect = null;
  +        onchange = null;
  +        onblur = null;
  +        onfocus = null;
           disabled = false;
           readonly = false;
  -	style = null;
  -	styleClass = null;
  +        style = null;
  +        styleClass = null;
           styleId = null;
           title = null;
  +        indexed = false;
   
       }
   
   
       // ------------------------------------------------------ Protected Methods
   
  +    /**
  +     *  Appends bean name with index in brackets for tags with
  +     *  'true' value in 'indexed' attribute.
  +     *  @param handlers The StringBuffer that output will be appended to.
  +     *  @exception JspException if 'indexed' tag used outside of iterate tag.
  +     */
  +    protected void prepareIndex( StringBuffer handlers, String name ) 
  +        throws JspException {
  +        // look for outer iterate tag
  +        IterateTag iterateTag = (IterateTag) findAncestorWithClass(this, IterateTag.class);
  +        if (iterateTag == null) {
  +             // this tag should only be nested in iteratetag, if it's not, throw exception
  +             JspException e = new JspException(messages.getMessage("indexed.noEnclosingIterate"));
  +             RequestUtils.saveException(pageContext, e);
  +             throw e;
  +        }
  +        if( name!=null )
  +                handlers.append( name );
  +        handlers.append("[");
  +        handlers.append(iterateTag.getIndex());
  +                handlers.append("]");
  +        if( name!=null )
  +                handlers.append(".");
  +    }
   
       /**
        * Prepares the style attributes for inclusion in the component's HTML tag.
  
  
  
  1.8       +56 -54    jakarta-struts/src/share/org/apache/struts/taglib/html/BaseFieldTag.java
  
  Index: BaseFieldTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/BaseFieldTag.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- BaseFieldTag.java	2001/04/29 00:38:04	1.7
  +++ BaseFieldTag.java	2001/07/24 11:42:15	1.8
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/BaseFieldTag.java,v 1.7 2001/04/29 00:38:04 craigmcc Exp $
  - * $Revision: 1.7 $
  - * $Date: 2001/04/29 00:38:04 $
  + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/BaseFieldTag.java,v 1.8 2001/07/24 11:42:15 oalexeev Exp $
  + * $Revision: 1.8 $
  + * $Date: 2001/07/24 11:42:15 $
    *
    * ====================================================================
    *
  @@ -79,7 +79,7 @@
    * Convenience base class for the various input tags for text fields.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.7 $ $Date: 2001/04/29 00:38:04 $
  + * @version $Revision: 1.8 $ $Date: 2001/07/24 11:42:15 $
    */
   
   public abstract class BaseFieldTag extends BaseInputTag {
  @@ -97,11 +97,11 @@
       protected String accept = null;
   
       public String getAccept() {
  -	return (this.accept);
  +        return (this.accept);
       }
   
       public void setAccept(String accept) {
  -	this.accept = accept;
  +        this.accept = accept;
       }
   
   
  @@ -111,11 +111,11 @@
       protected String name = Constants.BEAN_KEY;
   
       public String getName() {
  -	return (this.name);
  +        return (this.name);
       }
   
       public void setName(String name) {
  -	this.name = name;
  +        this.name = name;
       }
   
   
  @@ -150,57 +150,59 @@
        */
       public int doStartTag() throws JspException {
   
  -	// Create an appropriate "input" element based on our parameters
  -	StringBuffer results = new StringBuffer("<input type=\"");
  -	results.append(type);
  -	results.append("\" name=\"");
  -	results.append(property);
  -	results.append("\"");
  -	if (accesskey != null) {
  -	    results.append(" accesskey=\"");
  -	    results.append(accesskey);
  -	    results.append("\"");
  -	}
  -	if (accept != null) {
  -	    results.append(" accept=\"");
  -	    results.append(accept);
  -	    results.append("\"");
  -	}
  -	if (maxlength != null) {
  -	    results.append(" maxlength=\"");
  -	    results.append(maxlength);
  -	    results.append("\"");
  -	}
  -	if (cols != null) {
  -	    results.append(" size=\"");
  -	    results.append(cols);
  -	    results.append("\"");
  -	}
  -	if (tabindex != null) {
  -	    results.append(" tabindex=\"");
  -	    results.append(tabindex);
  -	    results.append("\"");
  -	}
  -	results.append(" value=\"");
  -	if (value != null) {
  -	    results.append(ResponseUtils.filter(value));
  -	} else if (redisplay || !"password".equals(type)) {
  +        // Create an appropriate "input" element based on our parameters
  +        StringBuffer results = new StringBuffer("<input type=\"");
  +        results.append(type);
  +        results.append("\" name=\"");
  +        if( indexed )
  +                prepareIndex( results, name );
  +        results.append(property);
  +        results.append("\"");
  +        if (accesskey != null) {
  +            results.append(" accesskey=\"");
  +            results.append(accesskey);
  +            results.append("\"");
  +        }
  +        if (accept != null) {
  +            results.append(" accept=\"");
  +            results.append(accept);
  +            results.append("\"");
  +        }
  +        if (maxlength != null) {
  +            results.append(" maxlength=\"");
  +            results.append(maxlength);
  +            results.append("\"");
  +        }
  +        if (cols != null) {
  +            results.append(" size=\"");
  +            results.append(cols);
  +            results.append("\"");
  +        }
  +        if (tabindex != null) {
  +            results.append(" tabindex=\"");
  +            results.append(tabindex);
  +            results.append("\"");
  +        }
  +        results.append(" value=\"");
  +        if (value != null) {
  +            results.append(ResponseUtils.filter(value));
  +        } else if (redisplay || !"password".equals(type)) {
               Object value = RequestUtils.lookup(pageContext, name, property,
                                                  null);
               if (value == null)
                   value = "";
               results.append(ResponseUtils.filter(value.toString()));
  -	}
  -	results.append("\"");
  -	results.append(prepareEventHandlers());
  -	results.append(prepareStyles());
  -	results.append(">");
  +        }
  +        results.append("\"");
  +        results.append(prepareEventHandlers());
  +        results.append(prepareStyles());
  +        results.append(">");
   
  -	// Print this field to our output writer
  +        // Print this field to our output writer
           ResponseUtils.write(pageContext, results.toString());
   
  -	// Continue processing this page
  -	return (EVAL_BODY_TAG);
  +        // Continue processing this page
  +        return (EVAL_BODY_TAG);
   
       }
   
  @@ -210,9 +212,9 @@
        */
       public void release() {
   
  -	super.release();
  -	accept = null;
  -	name = Constants.BEAN_KEY;
  +        super.release();
  +        accept = null;
  +        name = Constants.BEAN_KEY;
           redisplay = true;
   
       }