struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bill Siggelkow <bills...@bellsouth.net>
Subject Re: Problem with validation using both minlength and maxlength on the same field
Date Thu, 02 Dec 2004 15:21:02 GMT
AFAIK you cannot pull the minlength and maxlength values from the 
resource bundle; BUT, you can define these values as global constants in 
a validation.xml file. If you want, you could create a separate 
validation-constants.xml file only containing these values; making it 
easier for modification.

-Bill Siggelkow

David G. Friedman wrote:


> AHA!  It all makes sense then.  Since I didn't
> see a way to make the <var>...</var> tag pull
> from a resource, is there any way to do that?
> Then, theoretically, I can make the arg AND the
> var pull from the same resource label and make
> it easier for someone else to modify things
> instead of giving them access to the validation
> file.  A quick read of the source code for
> the commons validator Var object doesn't
> suggest any blatant way to do this, not to me.
> Do you think I should I submit a bugzilla
> enhancement request if there isn't a way to do
> it?  After all, the other fields can pull from
> a resource. *sad puppy dog look*
> 
> Maybe we should bold the note about var fields
> being required.  Speed readers like me, in this
> case, sometimes miss key points like that. :)
> 
> Regards and thanks for clearing this up for me,
> David
> 
> -----Original Message-----
> From: Niall Pemberton [mailto:niall.pemberton@blueyonder.co.uk]
> Sent: Thursday, December 02, 2004 4:24 AM
> To: Struts Users Mailing List
> Subject: Re: Problem with validation using both minlength and maxlength
> on the same field
> 
> 
> David,
> 
> Its not a bug, its not designed to work that way.
> 
> For the minlength validator you have to specify a minlength <var> otherwise
> it doesn't work properly (it will check for a minimum length of zero, which
> is nonsense).
> 
> For the maxlength validator you have to specify a maxlength <var> otherwise
> it doesn't work properly (it will check for a maximum length of zero, which
> is also nonsense).
> 
> The <arg> elements are only used as replacement values for error messages -
> not by the validator in actually checking the minimum or maximum length.
> 
> Niall
> 
> ----- Original Message -----
> From: "David G. Friedman" <humble@ix.netcom.com>
> To: "Struts Users Mailing List" <user@struts.apache.org>
> Sent: Thursday, December 02, 2004 6:09 AM
> Subject: RE: Problem with validation using both minlength and maxlength on
> the same field
> 
> 
> 
>>Niall,
>>
>>Derek isn't crazy and this looks like a bug to me IF your args try to use
>>'resource="true"'.  I duplicated the problem using Struts 1.2.4 with the
>>commons validator 1.1.3 and 1.1.4 jars.  Sadly, the java code suggests
>>resource="true" works in 1.1.4 but I can't get it to work even with a new
>>1.1.4 testing jar AND fully stopping/restarting Tomcat 5.5.4.
> 
> Essentially,
> 
>>I'm seeing resource="true" use the message resources to fill out the error
>>fields on both the client and server sides, just not populating the vars
> 
> for
> 
>>the client or server side validations to be able to use them.
>>
>>For example, using this rule, call it "rule A", everything works normally
> 
> on
> 
>>the client and server sides:
>>
>><form name="testingForm">
>>    <field property="name" depends="required, minlength, maxlength">
>>        <arg0 key="testingForm.name"/>
>>        <arg1 name="minlength" key="${var:minlength}" resource="false" />
>>        <arg1 name="maxlength" key="${var:maxlength}" resource="false" />
>>        <var><var-name>minlength</var-name><var-value>7</var-value></var>
>>        <var><var-name>maxlength</var-name><var-value>20</var-value></var>
>>    </field>
>></form>
>>
>>Modifying this into "rule B", the validation will not work on the client
>>side OR the server side, BUT the error messages show the appropriate
> 
> message
> 
>>resources numbers and words (for the arg0 field name, for example).  Here
> 
> is
> 
>>"rule B":
>>
>><form name="testingForm">
>>    <field property="name" depends="required, minlength, maxlength">
>>        <arg0 key="testingForm.name"/>
>>        <arg1 name="minlength" key="testingForm.name.min" resource="true"
> 
> />
> 
>>        <arg1 name="maxlength" key="testingForm.name.max" resource="true"
> 
> />
> 
>>    </field>
>></form>
>>
>>My message resources file works properly (tested thoroughly) with:
>>testingForm.name=Name
>>testingForm.name.min=7
>>testingForm.name.max=20
>>
>>At: /WEB-INF/classes/resources/Application.properties
>>In struts-config.xml as:
>><message-resources parameter="resources.Application" null="false" />
>>
>>Here is the lower level stuff showing the problem.  With "rule A", our
>>Validation methods set maxlength, minlength, etc. properties as expected
> 
> in
> 
>>the JavaScript such as:
>>
>>function ValidationForm_required () {
>>     this.a0 = new Array("name", "Name is required.", new Function
>>("varName", "this.maxlength='20'; this.minlength='7';  return
>>this[varName];"));
>>    }
>>
>>    function ValidationForm_minlength () {
>>     this.a0 = new Array("name", "Name can not be less than 7
> 
> characters.",
> 
>>new Function ("varName", "this.maxlength='20'; this.minlength='7';  return
>>this[varName];"));
>>    }
>>
>>    function ValidationForm_maxlength () {
>>     this.a0 = new Array("name", "Name can not be greater than 20
>>characters.", new Function ("varName", "this.maxlength='20';
>>this.minlength='7';  return this[varName];"));
>>    }
>>
>>And in the server-side Java Field object:
>>
>>Field:
>>key = name
>>property = name
>>indexedProperty = null
>>indexedListProperty = null
>>depends = required, minlength, maxlength
>>page = 0
>>fieldOrder = 0
>>Vars:
>>maxlength=Var: name=maxlength  value=20  jsType=null
>>
>>minlength=Var: name=minlength  value=7  jsType=null
>>
>>However, set the resource="true" as in "rule B", and you are missing that
>>information on both the client side and the server side:
>>
>> function ValidationForm_required () {
>>     this.a0 = new Array("name", "Name is required.", new Function
>>("varName", " return this[varName];"));
>>    }
>>
>>    function ValidationForm_minlength () {
>>     this.a0 = new Array("name", "Name can not be less than 7
> 
> characters.",
> 
>>new Function ("varName", " return this[varName];"));
>>    }
>>
>>    function ValidationForm_maxlength () {
>>     this.a0 = new Array("name", "Name can not be greater than 20
>>characters.", new Function ("varName", " return this[varName];"));
>>    }
>>
>>And for the server-side your Field object ALSO lacks the variables:
>>
>>Field:
>>key = name
>>property = name
>>indexedProperty = null
>>indexedListProperty = null
>>depends = required, minlength, maxlength
>>page = 0
>>fieldOrder = 0
>>Vars:
>>
>>End result, "rule A" works on both sides while "rule B" fails on both
> 
> sides
> 
>>but does correctly populate the error fields with the message parameters.
>>
>>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
>>
>>Additionally, I don't like the redundancy.  Using the above illustrations,
>>this.a0 is set in EVERY method.  Can't we consolidate this so it is setup
>>once something like the below and have that put into the main
>>"validateWhateverForm(form)" method after checking that bCancel is false
> 
> and
> 
>>before the validation checks?
>>
>>this.a0 = new Array("name", new Function ("varName", "this.maxlength='20';
>>this.minlength='7';  this.error.minlength='Name can not be less than 7
>>characters.'; this.error.maxlength='Name can not be greater than 20
>>characters.';return this[varName];"));
>>
>>The 2 differences being:
>>
>>a) All errors are in one place under this.error.VALIDATIONTYPE such as
>>this.error.minlength, this.error.maxlength, this.error.required,
>>this.error.intRange, etc. instead of being Array index 1 (if starting from
> 
> a
> 
>>zero array index position)
>>
>>b) Initialization for each object is in one place.  Since the JavaScript
>>appears to look for an object matching the first name of the Array anyway,
>>wouldn't this be cleaner and less redundant?
>>
>>Should I post the top part and/or the bottom part to Buzilla?  Which one?
>>Commons or Struts?  Opinions are requested on this one plus a few more
>>people to triple check this by performing their own simple tests like
> 
> mine.
> 
>>Regards,
>>David
>>
>>-----Original Message-----
>>From: Niall Pemberton [mailto:niall.pemberton@blueyonder.co.uk]
>>Sent: Wednesday, December 01, 2004 8:11 PM
>>To: Struts Users Mailing List
>>Subject: Re: Problem with validation using both minlength and maxlength
>>on the same field
>>
>>
>>You need to specify maxlength and minlength variables.
>>
>>          <field
>>            property="myField"
>>            depends="minlength, maxlength, integer">
>>            <arg0 key="sampleApp.myField.label"/>
>>            <arg1 key="sampleApp.myField.minLen" name="minlength"  />
>>            <arg1 key="sampleApp.myField.maxLen" name="maxlength"  />
>>            <var>
>>                 <var-name>minlength</var-name><var-value>10</var-value>
>>            </var>
>>            <var>
>>                 <var-name>maxlength</var-name><var-value>20</var-value>
>>            </var>
>>
>>Alternatively, if its an integer field you could use the intRange
> 
> validator
> 
>>instead
>>
>>          <field
>>            property="myField"
>>            depends="integer,intRange">
>>            <arg0 key="sampleApp.myField.label"/>
>>            <arg1 key="${var:min}" resource="false"  />
>>            <arg2 key="${var:max}" resource="false"  />
>>            <var>
>>                 <var-name>min</var-name><var-value>10</var-value>
>>            </var>
>>            <var>
>>                 <var-name>max</var-name><var-value>20</var-value>
>>            </var>
>>
>>
>>Niall
>>
>>----- Original Message -----
>>From: "David G. Friedman" <humble@ix.netcom.com>
>>To: "Struts Users Mailing List" <user@struts.apache.org>
>>Sent: Thursday, December 02, 2004 12:46 AM
>>Subject: RE: Problem with validation using both minlength and maxlength on
>>the same field
>>
>>
>>
>>>Derek,
>>>
>>>I'm seeing the same thing you described.  I'm sorry I didn't believe
> 
> you.
> 
>>>Sadly, I'm having a HELL of a time figuring out what's wrong because I
>>>recently upgraded my development setup to Struts 1.2.4 and Tomcat 5.5.4
>>
>>and
>>
>>>haven't used validation in a while.  Trying the 1.1.4 validator binary
>>>didn't help any.  I'm feeling really stupid since used to be able to get
>>>this to work.  Too many variables have changed on me. *sigh*
>>>
>>>Regards,
>>>David
>>>
>>>-----Original Message-----
>>>From: Derek Broughton [mailto:derek@pointerstop.ca]
>>>Sent: Wednesday, December 01, 2004 1:18 PM
>>>To: Struts Users Mailing List
>>>Subject: Re: Problem with validation using both minlength and maxlength
>>>on the same field
>>>
>>>
>>>On Wednesday 01 December 2004 13:49, jesnook@fedex.com wrote:
>>>
>>>>I'm trying to validate a simple field.  I want to validate that the
>>
>>field
>>
>>>>is an integer, and meets the min and max length requirements.  In the
>>
>>same
>>
>>>>application I am able to correctly validate a date field so I'm
>>
>>confident
>>
>>>>my overall struts setup is correct.  However when I try to do both a
> 
> min
> 
>>>>and max length check on the same field, the max length check doesn't
>>
>>work.
>>
>>>> If I exceed the max length I get the min length message.  Below is a
>>>>snippet from my validation.xml file.  I've setup my properties file to
>>>>include the min and max length constants.
>>>>
>>>>validation.xml
>>>>...
>>>>...
>>>>         <field
>>>>           property="myField"
>>>>           depends="minlength, maxlength, integer">
>>>>           <arg0 key="sampleApp.myField.label"/>
>>>>           <arg1 key="sampleApp.myField.minLen" name="minlength"  />
>>>>           <arg1 key="sampleApp.myField.maxLen" name="maxlength"  />
>>>
>>>Despite two other good looking answers, I'd have to say that it seems
>>>unlikely
>>>that these should _both_ be "arg1" :-)
>>>--
>>>derek
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>>
>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>For additional commands, e-mail: user-help@struts.apache.org
>>
>>
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org


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


Mime
View raw message