I'm having a conversation with David Winterfeldt regarding how the 
validator works, specifically with Struts.  He suggested I raise the 
question here for more input.

If I have three fields,  defined:

   <field   property="lastName"    depends="required">
      <arg0 key="subscriberForm.lastName.label"/>
     </field>
   <field  property="dateOfBirth" depends="required,date">
      <arg0 key="subscriberForm.dateOfBirth.label"/>
     </field>
   <field  property="dateOfDeath" depends="date">
      <arg0 key="subscriberForm.dateOfDeath.label"/>
     </field>

The way the validator *should* behave, in my opinion:

field                 value                   result
--------------------------------------------------------------------------
lastName        <empty>            Error
dateOfBirth     <empty>            Error
dateOfDeath   <empty>            No Error
--------------------------------------------------------------------------
lastName        <empty>            Error
dateOfBirth     <empty>            Error
dateOfDeath   Garbage           Error
--------------------------------------------------------------------------
lastName        <empty>            Error
dateOfBirth     Garbage           Error
dateOfDeath   Garbage           Error
--------------------------------------------------------------------------

Unfortunately, the way it works right now is that:

1) date implies required in validator-rules.xml, which means that all
dates are required.  You can only make a date (or float, or any other
type-validated field) optional by removing the "required" from 
validator-rules.xml

2) If you remove the required dependency from validator-rules, it still
doesn't work right, because if you put a non-date in dateOfBirth and
leave lastName empty, only lastName will generate an error, because
the way Validator is written right now, if any dependency flags an error
(even in another field), it stops validation beyond that dependency in
all fields.

So the matrix looks like this at the moment:

field                 value                   result
--------------------------------------------------------------------------
lastName        <empty>            Error
dateOfBirth     <empty>            Error
dateOfDeath   <empty>            Error (because date implies required)
--------------------------------------------------------------------------
lastName        <empty>            Error
dateOfBirth     <empty>            Error
dateOfDeath   Garbage           No Error (because required failing on
                                                     other fields stops 
date validation here)
--------------------------------------------------------------------------
lastName        <empty>            Error
dateOfBirth     Garbage           No Error (because required failing on
                                                     other fields stops 
date validation here)
dateOfDeath   Garbage           No Error (because required failing on
                                                     other fields stops 
date validation here)
--------------------------------------------------------------------------

In my opinion, I couldn't deploy a commercial site right now using the
code as is, because it doesn't handle validations in the way a user
would expect.

I have a patch for Validator I've submitted that refactors validate()
and makes it work right for the cases above.  Am I the only
one who thinks it's important to make this work the way most
developers would expect it to?

James


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to