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]>
