You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Scott Van Wart <sc...@indosoft.com> on 2006/08/16 19:03:52 UTC

I can't put 'maxlength' validator values in my .properties file?

I tried the following:

  <field property="name" depends="maxlength">
    <msg name="maxlength" key="error.name.overflow" />
    <arg name="maxlength" bundle="constraints" key="name.length" />
  </field>

Now I figured that this would cause the maxlength validator to get the 
value for maxlength from message resources, rather than hardcoding it 
with var, var-name and var-value tags.  But it doesn't!  It only uses 
this to pass to the {0} in the error message (in 
org.apache.struts.validator.FieldChecks.validateMaxLength, version 1.1.4):

  // No reference to resources at this point, only in the exception handler
  int max = Integer.parseInt(field.getVarValue("maxlength"));

Am I missing something?

- Scott


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: I can't put 'maxlength' validator values in my .properties file?

Posted by Niall Pemberton <ni...@gmail.com>.
On 8/16/06, Scott Van Wart <sc...@indosoft.com> wrote:
> I tried the following:
>
>   <field property="name" depends="maxlength">
>     <msg name="maxlength" key="error.name.overflow" />
>     <arg name="maxlength" bundle="constraints" key="name.length" />
>   </field>
>
> Now I figured that this would cause the maxlength validator to get the
> value for maxlength from message resources, rather than hardcoding it
> with var, var-name and var-value tags.  But it doesn't!  It only uses
> this to pass to the {0} in the error message (in
> org.apache.struts.validator.FieldChecks.validateMaxLength, version 1.1.4):
>
>   // No reference to resources at this point, only in the exception handler
>   int max = Integer.parseInt(field.getVarValue("maxlength"));
>
> Am I missing something?

Yes - two things:

1) The maxlength validator never gets the "variable" values used to
validate from <arg> elements - they are only ever used for "error
message arguments". So you need to specify a <var> element to specify
the maxlength value.

2) Support for "variables" being specified in "resources" was added to
Struts 1.3.x (and not the 1.2.x branch) - so even if you upgraded to
Validator 1.2.0 or Validator 1.3.0 its not going to work with Strutsb
1.2.x - try Struts 1.3.5

http://wiki.apache.org/jakarta-commons/ValidatorVersion120

Niall


> - Scott

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: I can't put 'maxlength' validator values in my .properties file?

Posted by Scott Van Wart <sc...@indosoft.com>.
David Friedman wrote:
> Right, but the invoked Resources.getActionMessage() has calls inside it for
> the bundle in the current trunk:
> http://svn.apache.org/viewvc/struts/struts1/trunk/core/src/main/java/org/apa
> che/struts/validator/Resources.java?view=markup
>
> It looks like it hasn't changed from the 1.2.X branch and it is definitely
> different compared to the 1.1.X branch.  If you correct the problem to the
> Resources class you might want to submit it to JIRA.
>   
Geesh that's weird... I'm glad you sent the link to the trunk.  
FieldChecks specifically is what is causing me problems.  getVarValue is 
called indistriminately in my copy of struts (1.2.9 to the very, very 
best of my knowledge), but according to 
http://svn.apache.org/viewvc/struts/struts1/trunk/core/src/main/java/org/apache/struts/validator/FieldChecks.java?view=markup, 
the trunk's validateMaxLength is completely different... sigh... time to 
check some more JARs.  Actually, I'm going to check the 1.2.x branch 
first to see whether or not I'm completely off my rocker.  In between 
your posts I wrote my own validateMaxLength that does the same thing 
(only not as generically(sp) as the trunk's version).  You should really 
type your posts faster (kidding! :)

Thanks again!

- Scott

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: I can't put 'maxlength' validator values in my .properties file?

Posted by Scott Van Wart <sc...@indosoft.com>.
David Friedman wrote:
> Right, but the invoked Resources.getActionMessage() has calls inside it for
> the bundle in the current trunk:
> http://svn.apache.org/viewvc/struts/struts1/trunk/core/src/main/java/org/apa
> che/struts/validator/Resources.java?view=markup
>
> It looks like it hasn't changed from the 1.2.X branch and it is definitely
> different compared to the 1.1.X branch.  If you correct the problem to the
> Resources class you might want to submit it to JIRA.
>   
http://svn.apache.org/viewvc/struts/struts1/trunk/core/src/main/java/org/apache/struts/validator/FieldChecks.java?revision=289694&view=markup

This is the first revision with the resource support (2005 Sep 17).  
Struts 1.2.9 was released 2006 Mar 22, but doesn't include this!

- Scott

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: I can't put 'maxlength' validator values in my .properties file?

Posted by David Friedman <hu...@ix.netcom.com>.
Right, but the invoked Resources.getActionMessage() has calls inside it for
the bundle in the current trunk:
http://svn.apache.org/viewvc/struts/struts1/trunk/core/src/main/java/org/apa
che/struts/validator/Resources.java?view=markup

It looks like it hasn't changed from the 1.2.X branch and it is definitely
different compared to the 1.1.X branch.  If you correct the problem to the
Resources class you might want to submit it to JIRA.

Regards,
David

-----Original Message-----
From: Scott Van Wart [mailto:scott@indosoft.com]
Sent: Wednesday, August 16, 2006 1:30 PM
To: Struts Users Mailing List
Subject: Re: I can't put 'maxlength' validator values in my .properties
file?


David Friedman wrote:
> I think you need to have at least Struts v1.2.8 unless you manually
upgraded
> the Commons Validator jar up to version 1.2.0.  If I understand correctly,
> validator versions before 1.2.0 (Struts < 1.2.8) don't actually make use
of
> the "bundle" attribute in your validator xml files.
>
> So, what version of Struts are you using (1.1.4?) and/or what version of
the
> Commons Validator are you using?  Have you tried replacing the commons
> validator jar?  I think I read that some people have tried that for older
> versions but I'm not positive.
>
Another issue is that the FieldChecks class is a part of Struts (1.2.9)
and not the commons validator.  The line where I would assume it should
grab it from the resources bundle doesn't contain any resource references:

    /**
     *  Checks if the field's length is less than or equal to the
maximum value.
     *  A <code>Null</code> will be considered an error.
     *
     * @param  bean     The bean validation is being performed on.
     * @param  va       The <code>ValidatorAction</code> that is
currently being performed.
     * @param  field    The <code>Field</code> object associated with
the current
     *      field being validated.
     * @param  errors   The <code>ActionMessages</code> object to add
errors to if any
     *      validation errors occur.
     * @param validator The <code>Validator</code> instance, used to access
     *      other field values.
     * @param  request  Current request object.
     * @return True if stated conditions met.
     */
    public static boolean validateMaxLength(Object bean,
                                            ValidatorAction va, Field field,
                                            ActionMessages errors,
                                            Validator validator,
                                            HttpServletRequest request) {

        String value = null;
        if (isString(bean)) {
            value = (String) bean;
        } else {
            value = ValidatorUtils.getValueAsString(bean,
field.getProperty());
        }

        if (value != null) {
            try {
                int max =
Integer.parseInt(field.getVarValue("maxlength")); // <---- RIGHT HERE

                if (!GenericValidator.maxLength(value, max)) {
                    errors.add(field.getKey(),
Resources.getActionMessage(validator, request, va, field));

                    return false;
                }
            } catch (Exception e) {
                errors.add(field.getKey(),
Resources.getActionMessage(validator, request, va, field));
                return false;
            }
        }

        return true;
    }


So it's looking like I'm going to need to write my own validator.  OH
well....

- Scott


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: I can't put 'maxlength' validator values in my .properties file?

Posted by Scott Van Wart <sc...@indosoft.com>.
David Friedman wrote:
> I think you need to have at least Struts v1.2.8 unless you manually upgraded
> the Commons Validator jar up to version 1.2.0.  If I understand correctly,
> validator versions before 1.2.0 (Struts < 1.2.8) don't actually make use of
> the "bundle" attribute in your validator xml files.
>
> So, what version of Struts are you using (1.1.4?) and/or what version of the
> Commons Validator are you using?  Have you tried replacing the commons
> validator jar?  I think I read that some people have tried that for older
> versions but I'm not positive.
>   
Another issue is that the FieldChecks class is a part of Struts (1.2.9) 
and not the commons validator.  The line where I would assume it should 
grab it from the resources bundle doesn't contain any resource references:

    /**
     *  Checks if the field's length is less than or equal to the 
maximum value.
     *  A <code>Null</code> will be considered an error.
     *
     * @param  bean     The bean validation is being performed on.
     * @param  va       The <code>ValidatorAction</code> that is 
currently being performed.
     * @param  field    The <code>Field</code> object associated with 
the current
     *      field being validated.
     * @param  errors   The <code>ActionMessages</code> object to add 
errors to if any
     *      validation errors occur.
     * @param validator The <code>Validator</code> instance, used to access
     *      other field values.
     * @param  request  Current request object.
     * @return True if stated conditions met.
     */
    public static boolean validateMaxLength(Object bean,
                                            ValidatorAction va, Field field,
                                            ActionMessages errors,
                                            Validator validator,
                                            HttpServletRequest request) {

        String value = null;
        if (isString(bean)) {
            value = (String) bean;
        } else {
            value = ValidatorUtils.getValueAsString(bean, 
field.getProperty());
        }

        if (value != null) {
            try {
                int max = 
Integer.parseInt(field.getVarValue("maxlength")); // <---- RIGHT HERE

                if (!GenericValidator.maxLength(value, max)) {
                    errors.add(field.getKey(), 
Resources.getActionMessage(validator, request, va, field));

                    return false;
                }
            } catch (Exception e) {
                errors.add(field.getKey(), 
Resources.getActionMessage(validator, request, va, field));
                return false;
            }
        }

        return true;
    }


So it's looking like I'm going to need to write my own validator.  OH 
well....

- Scott

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: I can't put 'maxlength' validator values in my .properties file?

Posted by Scott Van Wart <sc...@indosoft.com>.
David Friedman wrote:
> I think you need to have at least Struts v1.2.8 unless you manually upgraded
> the Commons Validator jar up to version 1.2.0.  If I understand correctly,
> validator versions before 1.2.0 (Struts < 1.2.8) don't actually make use of
> the "bundle" attribute in your validator xml files.
>
> So, what version of Struts are you using (1.1.4?) and/or what version of the
> Commons Validator are you using?  Have you tried replacing the commons
> validator jar?  I think I read that some people have tried that for older
> versions but I'm not positive.
>   
Validator 1.1.4 (according to the manifest, and Eclipse seems to think 
the source syncs up properly so I'm convinced), the one that came with 
Struts 1.2.9 (which I'm using too).

I'll try updating the validator, thanks!

- Scott

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: I can't put 'maxlength' validator values in my .properties file?

Posted by David Friedman <hu...@ix.netcom.com>.
I think you need to have at least Struts v1.2.8 unless you manually upgraded
the Commons Validator jar up to version 1.2.0.  If I understand correctly,
validator versions before 1.2.0 (Struts < 1.2.8) don't actually make use of
the "bundle" attribute in your validator xml files.

So, what version of Struts are you using (1.1.4?) and/or what version of the
Commons Validator are you using?  Have you tried replacing the commons
validator jar?  I think I read that some people have tried that for older
versions but I'm not positive.

Regards,
David

-----Original Message-----
From: Scott Van Wart [mailto:scott@indosoft.com]
Sent: Wednesday, August 16, 2006 1:04 PM
To: user@struts.apache.org
Subject: I can't put 'maxlength' validator values in
my .properties file?

I tried the following:

  <field property="name" depends="maxlength">
    <msg name="maxlength" key="error.name.overflow" />
    <arg name="maxlength" bundle="constraints" key="name.length" />
  </field>

Now I figured that this would cause the maxlength validator to get the
value for maxlength from message resources, rather than hardcoding it
with var, var-name and var-value tags.  But it doesn't!  It only uses
this to pass to the {0} in the error message (in
org.apache.struts.validator.FieldChecks.validateMaxLength, version 1.1.4):

  // No reference to resources at this point, only in the exception handler
  int max = Integer.parseInt(field.getVarValue("maxlength"));

Am I missing something?

- Scott


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org