Hi Edmund and John!

I have sent two emails to this list regarding this bug in Intake and no-one 
has replied yet :(  It exists in both the most recent Turbine 2.2 code and 
the most recent CVS version of Fulcrum.

I'll try to explain myself a bit better this time as maybe the bug report I 
sent wasn't clear.  See this message...

http://www.mail-archive.com/[email protected]/msg06959.html

> > > I have got a problem with the rules for checking field values in
> > > intake. Somehow I cannot check for empty fields. I define the rule as
> > > explained in the docs like this:
> > >
> > > ..
> > > <field name="PersonName" key="personname" type="String">
> > >     <rule name="minLength" value="1">Bitte geben Sie den Nachnamen
> > > an.</rule> </field>
> > > ..
> > >
> > > When I leave the field empty, intake does not report an error.
> > > (isAllValid() still returns true)
> >
> > not sure why this does not work.

If a browser submits a form with an empty text field (with, say, the
parameter name="foo"), then the request parameters will come in in the form
"?foo=&bar=..." etc., and both javax.servlet.HttpServletRequest and
org.apache.turbine.util.ParameterParser will report that the parameter
"foo" is present with the value "" (the empty string). �However,
org.apache.turbine.services.intake.model.Field will treat this field as if
it is not present at all: specifically, in the method validate() is the
following code:

 � � � � � �stringValue = pp.getString(getKey());
 � � � � � �if ( stringValue.length() == 0 )
 � � � � � �{
 � � � � � � � �set_flag = false;
 � � � � � �}

Thus, there is no way to distinguish between an empty field and a field that 
is not present in the HTML form at all.

I am happy to generate a patch that removes the above check, but I am not 
sure if this will affect the rest of the Intake code...

> > > I have experimented a bit with intake, and other rules actually do work
> > > as expected, if the field value is not empty. It seems the rules simply
> > > bypassed for empty fields and no checks are applied. So I also tried
> > > setting the required messsage:
> > >
> > > ..
> > > <field name="PersonName" key="personname" type="String">
> > >   <required-message>Bitte geben Sie den Nachnamen
> > > an.</required-message> </field>
> > > ..
> > >
> > > Again, no error when I leave the field empty. Is this a bug in the
> > > intake service (included in TDK 2.1 release) or am I doing something
> > > wrong?

See above.

> > <required-message> is to provide a message that is to be displayed if
> > the field is declared as required and the field is empty.  It does not
> > make the field required.
> >
> > <rule name="required" value="true">Bitte geben Sie den Nachnamen
> > an.</rule>
> >
> > should work, though i have not looked at what's in 2.1 for a while.
>
> Thanks for the quick reply. That rule actually does seem to work (though I
> cannot find anything about a rule with name "required" in the intake docs
> at
> http://jakarta.apache.org/turbine/turbine-2/services/intake-service.html).

The "required" rule does work, but this doesn't help in all situations.  One 
simple example is an "Edit User Profile" form which contains an "Email 
Address" field that is not required and a "Work Phone Number" field that is 
required.  When a user first registers, they type in a valid email address in 
the "Email Address" field and their current work phone number in the "Work 
Phone Number" field.  Then they change jobs, so they go to the Edit User 
Profile page, empty the email address field, edit the work phone number field 
(but accidentally type a 'abc' instead of a valid number) and submit the 
form.  Intake finds the the Work Phone Number field is invalid so it 
redisplays the page containing the form with the appropriate error message.  
HERE IS THE PROBLEM....  the email address field is pre-populated with the 
old email address even though the user had previously emptied it!!

This happens because Intake doesn't disinguish empty fields from fields that 
are not present in the form at all.  See my other email for more information.

> A bit odd is, that the isAllValid() method still returns true, but lateron
> when I try to assign the fields to the proper data object (using the
> group.setProperties() method) an exception is thrown (message: "Attempted
> to assign an invalid input").
>
> Maybe I can figure out another way to check the field validity (either
> that, or I will have to watch for that exception).

I think the abovementioned code should be removed from 
org.apache.turbine.services.intake.model.Field and 
org.apache.fulcrum.intake.model.Field but, again, I am not sure whether other 
code in Intake relies on the above check or whether existing applications 
that use Intake will be affected.

If you want me to submit a patch, please let me know.

Thanks,

-- Rodney

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

Reply via email to