You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by cr...@apache.org on 2001/02/11 00:31:51 UTC

cvs commit: jakarta-struts/web/test html-multibox.jsp

craigmcc    01/02/10 15:31:51

  Modified:    src/doc  struts-html.xml
               src/share/org/apache/struts/taglib/html
                        LocalStrings.properties MultiboxTag.java
               web/test html-multibox.jsp
  Log:
  Enhance the <html:multibox> tag so that you can determine the value to be
  returned to the server dynamically.  Thus, you can specify either:
  
      <html:multibox property="myprop" value="myvalue"/>
  
  or (for example)
  
      <html:multibox property="myprop">
        <bean:write name="mybean" property="valueprop"/>
      </html:multibox>
  
  This change is different from the suggestions on Bugzilla bug report
  number 402, but is consistent with the way other HTML tags operate.
  
  PR: Bugzilla Bug Report #402
  
  Revision  Changes    Path
  1.8       +11 -0     jakarta-struts/src/doc/struts-html.xml
  
  Index: struts-html.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/doc/struts-html.xml,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- struts-html.xml	2001/02/09 19:33:10	1.7
  +++ struts-html.xml	2001/02/10 23:31:49	1.8
  @@ -2200,6 +2200,17 @@
   				array-valued property instead of multiple boolean properties.
   				This tag is only valid when nested inside a form tag body.
   			</p>
  +
  +                <p>The value to be returned to the server, if this checkbox is
  +                selected, must be defined by one of the following methods:</p>
  +                <ul>
  +                <li>Specify a <code>value</code> attribute, whose contents will
  +                be used literally as the value to be returned.</li>
  +                <li>Specify no <code>value</code> attribute, and the nested
  +                body content of this tag will be used as the value to be
  +                returned.</li>
  +                </ul>
  +
   		</info>
   
   		<attribute>
  
  
  
  1.5       +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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- LocalStrings.properties	2001/02/07 23:10:44	1.4
  +++ LocalStrings.properties	2001/02/10 23:31:50	1.5
  @@ -26,6 +26,7 @@
   linkTag.type1=Object must be of type Dictionary
   messageTag.message=Missing message for key {0}
   messageTag.resources=Missing resources attribute {0}
  +multiboxTag.value=You must specify the value attribute or nested tag content
   optionTag.select=Option tag must be nested in a Select tag
   optionsTag.enumeration=Cannot create enumeration for {0}
   optionsTag.iterator=Cannot create iterator for {0}
  
  
  
  1.3       +58 -33    jakarta-struts/src/share/org/apache/struts/taglib/html/MultiboxTag.java
  
  Index: MultiboxTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/MultiboxTag.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MultiboxTag.java	2001/02/09 20:50:18	1.2
  +++ MultiboxTag.java	2001/02/10 23:31:50	1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/MultiboxTag.java,v 1.2 2001/02/09 20:50:18 craigmcc Exp $
  - * $Revision: 1.2 $
  - * $Date: 2001/02/09 20:50:18 $
  + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/MultiboxTag.java,v 1.3 2001/02/10 23:31:50 craigmcc Exp $
  + * $Revision: 1.3 $
  + * $Date: 2001/02/10 23:31:50 $
    *
    * ====================================================================
    *
  @@ -68,6 +68,7 @@
   import javax.servlet.jsp.JspException;
   import javax.servlet.jsp.PageContext;
   import javax.servlet.jsp.JspWriter;
  +import org.apache.struts.action.Action;
   import org.apache.struts.util.BeanUtils;
   import org.apache.struts.util.MessageResources;
   
  @@ -81,7 +82,7 @@
    *
    * @author Ralph Schaer
    * @author Craig R. McClanahan
  - * @version $Revision: 1.2 $ $Date: 2001/02/09 20:50:18 $
  + * @version $Revision: 1.3 $ $Date: 2001/02/10 23:31:50 $
    */
   
   public class MultiboxTag extends BaseHandlerTag {
  @@ -91,6 +92,13 @@
   
   
       /**
  +     * The constant String value to be returned when this checkbox is
  +     * selected and the form is submitted.
  +     */
  +    protected String constant = null;
  +
  +
  +    /**
        * The message resources for this package.
        */
       protected static MessageResources messages =
  @@ -175,12 +183,43 @@
   
   
       /**
  -     * Generate the required input tag.
  +     * Process the beginning of this tag.
        *
        * @exception JspException if a JSP exception has occurred
        */
       public int doStartTag() throws JspException {
   
  +	// Defer processing until the end of this tag is encountered
  +	return (EVAL_BODY_TAG);
  +
  +    }
  +
  +
  +
  +    /**
  +     * Save the body contents of this tag as the constant that we will
  +     * be returning.
  +     *
  +     * @exception JspException if a JSP exception has occurred
  +     */
  +    public int doAfterBody() throws JspException {
  +
  +        if (bodyContent != null)
  +            this.constant = bodyContent.getString().trim();
  +        if ("".equals(this.constant))
  +            this.constant = null;
  +        return (SKIP_PAGE);
  +
  +    }
  +
  +
  +    /**
  +     * Render an input element for this tag.
  +     *
  +     * @exception JspException if a JSP exception has occurred
  +     */
  +    public int doEndTag() throws JspException {
  +
   	// Create an appropriate "input" element based on our parameters
   	StringBuffer results = new StringBuffer("<input type=\"checkbox\"");
   	results.append(" name=\"");
  @@ -197,7 +236,17 @@
   	    results.append("\"");
   	}
   	results.append(" value=\"");
  -	results.append(this.value);
  +        String value = this.value;
  +        if (value == null)
  +            value = this.constant;
  +        if (value == null) {
  +            JspException e = new JspException
  +                (messages.getMessage("multiboxTag.value"));
  +            pageContext.setAttribute(Action.EXCEPTION_KEY, e,
  +                                     PageContext.REQUEST_SCOPE);
  +            throw e;
  +        }
  +        results.append(BeanUtils.filter(value));
   	results.append("\"");
   	Object bean = pageContext.findAttribute(name);
   	String values[] = null;
  @@ -229,36 +278,11 @@
   	results.append(prepareEventHandlers());
   	results.append(prepareStyles());
   	results.append(">");
  -
  -	// Print this field to our output writer
  -	JspWriter writer = pageContext.getOut();
  -	try {
  -	    writer.print(results.toString());
  -	} catch (IOException e) {
  -	    throw new JspException
  -		(messages.getMessage("common.io", e.toString()));
  -	}
  -
  -	// Continue processing this page
  -	return (EVAL_BODY_TAG);
  -
  -    }
  -
  -
  -
  -    /**
  -     * Optionally render the associated label from the body content.
  -     *
  -     * @exception JspException if a JSP exception has occurred
  -     */
  -    public int doEndTag() throws JspException {
  -
  -	if (bodyContent == null)
  -	    return (EVAL_PAGE);
   
  +        // Render this element to our response
   	JspWriter writer = pageContext.getOut();
   	try {
  -	    writer.println(bodyContent.getString().trim());
  +	    writer.println(results.toString());
   	} catch (IOException e) {
   	    throw new JspException
   		(messages.getMessage("common.io", e.toString()));
  @@ -276,6 +300,7 @@
       public void release() {
   
   	super.release();
  +        constant = null;
   	name = Constants.BEAN_KEY;
   	property = null;
   	value = null;
  
  
  
  1.3       +30 -10    jakarta-struts/web/test/html-multibox.jsp
  
  Index: html-multibox.jsp
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/web/test/html-multibox.jsp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- html-multibox.jsp	2001/01/10 01:54:22	1.2
  +++ html-multibox.jsp	2001/02/10 23:31:51	1.3
  @@ -27,7 +27,9 @@
     <tr>
       <th align="right">String 0</th>
       <td align="left">
  -      <html:multibox property="stringMultibox" value="String 0"/>
  +      <html:multibox property="stringMultibox">
  +        String 0
  +      </html:multibox>
       </td>
       <th align="right">(nested) String 0</th>
       <td align="left">
  @@ -38,7 +40,9 @@
     <tr>
       <th align="right">String 1</th>
       <td align="left">
  -      <html:multibox property="stringMultibox" value="String 1"/>
  +      <html:multibox property="stringMultibox">
  +        String 1
  +      </html:multibox>
       </td>
       <th align="right">(nested) String 1</th>
       <td align="left">
  @@ -49,7 +53,9 @@
     <tr>
       <th align="right">String 2</th>
       <td align="left">
  -      <html:multibox property="stringMultibox" value="String 2"/>
  +      <html:multibox property="stringMultibox">
  +        String 2
  +      </html:multibox>
       </td>
       <th align="right">(nested) String 2</th>
       <td align="left">
  @@ -60,7 +66,9 @@
     <tr>
       <th align="right">String 3</th>
       <td align="left">
  -      <html:multibox property="stringMultibox" value="String 3"/>
  +      <html:multibox property="stringMultibox">
  +        String 3
  +      </html:multibox>
       </td>
       <th align="right">(nested) String 3</th>
       <td align="left">
  @@ -71,7 +79,9 @@
     <tr>
       <th align="right">String 4</th>
       <td align="left">
  -      <html:multibox property="stringMultibox" value="String 4"/>
  +      <html:multibox property="stringMultibox">
  +        String 4
  +      </html:multibox>
       </td>
       <th align="right">(nested) String 4</th>
       <td align="left">
  @@ -90,7 +100,9 @@
       </td>
       <th align="right">(nested) 0</th>
       <td align="left">
  -      <html:multibox property="nested.intMultibox" value="0"/>
  +      <html:multibox property="nested.intMultibox">
  +        0
  +      </html:multibox>
       </td>
     </tr>
   
  @@ -101,7 +113,9 @@
       </td>
       <th align="right">(nested) 10</th>
       <td align="left">
  -      <html:multibox property="nested.intMultibox" value="10"/>
  +      <html:multibox property="nested.intMultibox">
  +        10
  +      </html:multibox>
       </td>
     </tr>
   
  @@ -112,7 +126,9 @@
       </td>
       <th align="right">(nested) 20</th>
       <td align="left">
  -      <html:multibox property="nested.intMultibox" value="20"/>
  +      <html:multibox property="nested.intMultibox">
  +        20
  +      </html:multibox>
       </td>
     </tr>
   
  @@ -123,7 +139,9 @@
       </td>
       <th align="right">(nested) 30</th>
       <td align="left">
  -      <html:multibox property="nested.intMultibox" value="30"/>
  +      <html:multibox property="nested.intMultibox">
  +        30
  +      </html:multibox>
       </td>
     </tr>
   
  @@ -134,7 +152,9 @@
       </td>
       <th align="right">(nested) 40</th>
       <td align="left">
  -      <html:multibox property="nested.intMultibox" value="40"/>
  +      <html:multibox property="nested.intMultibox">
  +        40
  +      </html:multibox>
       </td>
     </tr>