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; }