I had a similar thought recently - maybe adding key/bundle attributes to the <var> element or something along those lines. Currently I don't have any time to look at this but my initial thought is that it would be a v.useful enhancement. Currently you can specify multiple formsets with different Locales - but to my mind people probably only need to do that when they have e.g. different date patterns for different Locales - adding this kind of feature would probably largely remove the need for duplicating multiple formsets in most situations.
To pursue this you need to either raise it for discussion on the commons-dev list or created a bugzilla enhancement ticket against Commons Validator. Documentation patches are always welcome, if you feel like submitting one to make the need for the minlength/maxlength <var> clearer - although in the validator user guide under "Standard Built In Validations" it does say that these are required. Niall ----- Original Message ----- From: "David G. Friedman" <[EMAIL PROTECTED]> To: "Struts Users Mailing List" <[EMAIL PROTECTED]> Sent: Thursday, December 02, 2004 2:12 PM Subject: RE: Problem with validation using both minlength and maxlength on the same field > 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:[EMAIL PROTECTED] > 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" <[EMAIL PROTECTED]> > To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > 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:[EMAIL PROTECTED] > > 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" <[EMAIL PROTECTED]> > > To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > > 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:[EMAIL PROTECTED] > > > 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, [EMAIL PROTECTED] 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: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]