[ http://issues.apache.org/struts/browse/STR-2854?page=all ]
Don Brown resolved STR-2854:
----------------------------
Fix Version: 1.3.3
Resolution: Fixed
Assign To: Don Brown
I think it is a valid change to allow strings with just spaces, as your regex
might allow for that. I made the change, so please close the ticket if you can
verify.
> mask validator error
> --------------------
>
> Key: STR-2854
> URL: http://issues.apache.org/struts/browse/STR-2854
> Project: Struts Action 1
> Type: Bug
> Components: Core
> Versions: 1.2.7
> Environment: Windows XP, Weblogic 8.1 SP5
> Reporter: Jorge Rodríguez
> Assignee: Don Brown
> Priority: Critical
> Fix For: 1.3.3
>
> I have a problem with the mask validator when it is used without others
> validators such as "required" in struts 1.2.7.
> For example, I have a field which depends of a radio button selecction
> (requiredif in previous versions). In this case I'm using the "validwhen" and
> the "mask" validators because that field is an string with a date format
> (dd/mm/yyyy), so, i need to check it (optional fields with a special format.
> For that reason, I can't use the "required" rule). The problem is when it is
> filled in with only blank spaces. In this case, the "mask" validator doesn't
> work.
> <field property="txtDate" depends="mask,validwhen">
> <msg name="mask" key="errors.invalid"/>
> <arg position="0" key="Año" resource="false"/>
> <var>
> <var-name>mask</var-name>
> <var-value>${formatDate}</var-value>
> </var>
> <var>
> <var-name>test</var-name>
> <var-value>(((rdSelector==0) and (*this* !=null )) or
> (rdSelector==1))</var-value>
> </var>
> </field>
> where:
> ${formatDate} = ^[0-9][0-9][/][0-9][0-9][/][0-9][0-9][0-9][0-9]$
> rdSelector is my radio button field
> txtDate is a date textfield.
> I think, the problem is in the validateMask method of the FieldChecks class
> (org.apache.struts.validator):
> public static boolean validateMask(Object bean,ValidatorAction va, Field
> field,ActionMessages errors, Validator validator, HttpServletRequest request)
> {
> String mask = field.getVarValue("mask");
> String value = null;
> if (isString(bean)) {
> value = (String) bean;
> } else {
> value = ValidatorUtils.getValueAsString(bean,
> field.getProperty());
> }
> try {
> if (!GenericValidator.isBlankOrNull(value) // <b>THIS IS THE
> PROBLEM</b>
> && !GenericValidator.matchRegexp(value, mask)) {
> errors.add(field.getKey(),
> Resources.getActionMessage(validator, request, va,
> field));
> return false;
> } else {
> return true;
> }
> } catch (Exception e) {
> log.error(e.getMessage(), e);
> }
> return true;
> }
> The problem I found is in the second if:
> if (!GenericValidator.isBlankOrNull(value) && ......
> this means that if the field is empty, null or with only blank spaces as the
> isBlankOrNull method does, the field is not considered as invalid (the if
> block doesn't execute, so no errors are generated), and the second condition
> never executes because of the && operator, so, the Regular expression is
> never checked..
> I think , the if statement should be something like this ...
> if (value != null && value.length()>0
> && !GenericValidator.matchRegexp(value, mask)) {
>
> it is almost the same as the original if, but the difference is that it also
> includes strings with only
> blank spaces, and in this case the validator returns false just as it
> should be ..
> have you seen any problem like this?, can be fixed this problem in new
> releases? or there are some other solutions to solve it ?
>
> Thanks for your help.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/struts/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira