Consistent behavior across an app or an app framework is, it seems to me, a
desireable thing. Absent any compelling programming reasons, I think its a
great idea to have Struts tags behave similar to their jsp brethren.
Regards,
George Phillips

> -----Original Message-----
> From: Craig R. McClanahan [mailto:[EMAIL PROTECTED]]
> Sent: Monday, October 23, 2000 12:50 PM
> To: [EMAIL PROTECTED]
> Subject: Re: Problem with optional form fields
> 
> 
> Matthias Kerkhoff wrote:
> 
> > Hi all,
> >
> > I've noticed a problem with forms containing optional fields.
> >
> > Suppose you have a form containing some optional fields, that the
> > user can fill with some value or leave blank. If form validation
> > fails (for example because the user has not filled in values for
> > some _other_ mandatory fields) the usual pattern is to redisplay
> > the form page to the user together with some error messages.
> >
> > However, due to the way the form-field tags like <struts:text>
> > are implemented, the optional fields will then contain default
> > values, if the associated properties are not of type String.
> >
> > Example:
> >
> > Imagine a slightly modified subscription.jsp from the 
> struts-example,
> > that asks the user for an additional (and optional) Integer 
> property.
> >
> >   <tr>
> >     <th align="right">
> >       <struts:message key="prompt.intProperty"/>
> >     </th>
> >     <td align="left">
> >       <struts:text property="intProperty"/>
> >     </td>
> >   </tr>
> >
> > If the user enters invalid values for - let's say - the 
> mail hostname
> > and leaves the intProperty field blank, the subscription.jsp will be
> > redisplayed. This time, the intProperty field will contain 
> a 0 (instead
> > of being empty). Depending on the semantic behind 
> intProperty this could
> > make a serious difference, when this form is resubmitted.
> >
> > Is this behaviour intended ?
> >
> 
> It is a side effect of what is really happening.
> 
> The browser has no real clue that the field is an integer 
> field -- it just
> thinks there is text.  Therefore, what it sends as input for 
> an empty input
> field is a zero-length string, which (unfortunately) the 
> BeanUtils populate
> method treats as a zero when setting an integer field.
> 
> It might make sense to skip calling the setIntProperty() 
> field at all if the
> input is a zero-length string.  JSP follows this rule when you specify
> something like <jsp:setProperty name="beanname" 
> property="*"/>, so this
> would be more consistent with JSP as well.
> 
> What do you think?
> 
> > Matthias                          mailto:[EMAIL PROTECTED]
> 
> Craig McClanahan
> 
> ====================
> See you at ApacheCon Europe <http://www.apachecon.com>!
> Session VS01 (23-Oct 13h00-17h00):  Sun Technical Briefing
> Session T06  (24-Oct 14h00-15h00):  Migrating Apache JServ
>                                     Applications to Tomcat
> 
> 

Reply via email to