Sorry this went to the wrong list, but anyway.... Looking at CVS there is a validateUrl() method in the Struts FieldChecks class (added in version 1.15) - problem is it uses commons GenericValidator which has a static instance.
What do you think about changing this to instantiate a UrlValidator if any configuration parameters have been enetered in validation.xml, otherwise use the GenericValidator? Niall ----- Original Message ----- From: "David Graham" <[EMAIL PROTECTED]> To: "Struts Developers List" <[EMAIL PROTECTED]> Sent: Thursday, April 01, 2004 7:30 PM Subject: Re: Fw: UrlValidator() takes options - but how? > The url validation was added to commons validator but, as you're > discovering, Struts doesn't directly support it yet. Struts should > provide a hook into this new commons validator feature with predefined > configuration variables like those that have been suggested below (just > like how the maxlength validation uses a "maxlength" variable to configure > itself). > > Patches are always welcome! > > David > > --- Niall Pemberton <[EMAIL PROTECTED]> wrote: > > sending this again as it appears to have lost its way! > > > > Sent: Thursday, April 01, 2004 5:09 PM > > > > > > > The problem with GenericValidator is that it has a single instance of > > > UrlValidator in a static variable, so you can't go changing its > > > configuration every time a url is validated in your webapp as it > > wouldn't > > be > > > thread safe. In fact if you want the option to configure it on a field > > by > > > field basis then you are going to need to create a new instance of the > > > UrlValidator each time - or have some clever mechanism that caches a > > > UrlValidator for each field -its a shame the ValidatorAction doesn't > > do > > > that. > > > > > > Maybe modify FieldChecks.validateUrl() to check if any options/schemes > > have > > > been set (using <var>) - if they have then instantiate a new > > UrlValidator, > > > otherwise use the default GenericValidator.isUrl(). > > > > > > The other problem, which I usually forget is the javascript - if you > > allow > > > the server side to be configured then maybe the javascript should > > also > > take > > > those options into account (although the date validation only works > > with > > the > > > datePatternStrict option in javascript unless its changed in 1.2). > > > > > > Anyway my opinion is irrelevant as its the "powers that be" that you > > have > > to > > > convince to apply any patch you submit :-) > > > > > > Niall > > > > > > > > > ----- Original Message ----- > > > From: "Adam Hardy" <[EMAIL PROTECTED]> > > > To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > > > Sent: Thursday, April 01, 2004 3:24 PM > > > Subject: Re: UrlValidator() takes options - but how? > > > > > > > > > > Thanks for that Niall, you certainly know your stuff. > > > > > > > > I am thinking, if I change the UrlValidator in the source code, I > > could > > > > submit a patch to allow FieldChecks to set the <var> values from > > > > validation.xml. > > > > > > > > Currently, FieldChecks access UrlValidator via the GenericValidator: > > > > > > > > if (!GenericValidator.isBlankOrNull(value) && > > > > !GenericValidator.isUrl(value)) { > > > > > > > > Should I change this to: > > > > > > > > !GenericValidator.isUrl(value, allow2Slashes, noFragments, > > > > allowAllSchems)) { > > > > > > > > and edit GenericValidator accordingly, to pass the options in to > > > > UrlValidator. > > > > > > > > Is that a good idea? > > > > Adam > > > > > > > > > > > > On 04/01/2004 02:58 PM Niall Pemberton wrote: > > > > > UrlValidator is not the class that is instantiated by > > ValidatorAction > > > > > because it doesn't know anything about Struts resources - the > > Struts > > > > > FieldChecks.validateUrl() method calls commons GenericValidator > > which > > > > > instantiates the UrlValidator. > > > > > > > > > > Rather than using the struts FieldChecks.validateUrl(), create you > > own > > > > > version which instantiates the url validator and picks up <var> > > values > > > to > > > > > configure it. Something like: > > > > > > > > > > > > > > > <field property="someUrl" depends="myUrlValidator"> > > > > > <var><var-name>slashes</var-name> > > > > > <var-value>true</var-value> > > > > > </var> > > > > > <var><var-name>fragments</var-name> > > > > > <var-value>true</var-value> > > > > > </var> > > > > > </field> > > > > > > > > > > public static boolean validateUrl(Object bean, > > > > > ValidatorAction va, Field > > field, > > > > > ActionMessages errors, > > > > > HttpServletRequest > > request) { > > > > > > > > > > String value = null; > > > > > if (isString(bean)) { > > > > > value = (String) bean; > > > > > } else { > > > > > value = ValidatorUtils.getValueAsString(bean, > > > > > field.getProperty()); > > > > > } > > > > > int options = 0; > > > > > > > > > > if ("true".equals(field.getVarValue("slashes"))) > > > > > options += UrlValidator.ALLOW_2_SLASHES; > > > > > > > > > > if ("true".equals(field.getVarValue("fragments"))) > > > > > options += UrlValidator.ALLOW_2_SLASHES; > > > > > > > > > > UrlValidator urlValidator = new UrlValidator(options); > > > > > > > > > > if (!GenericValidator.isBlankOrNull(value) && > > > > > !urlValidator.isValid(value)) { > > > > > errors.add(field.getKey(), > > > Resources.getActionMessage(request, > > > > > va, field)); > > > > > return false; > > > > > } else { > > > > > return true; > > > > > } > > > > > } > > > > > > > > > > ----- Original Message ----- > > > > > From: "Adam Hardy" <[EMAIL PROTECTED]> > > > > > To: <[EMAIL PROTECTED]> > > > > > Sent: Thursday, April 01, 2004 12:17 PM > > > > > Subject: UrlValidator() takes options - but how? > > > > > > > > > > > > > > > > > > > >>In UrlValidator() in the validator package, one can set various > > options > > > > >>upon instantiation, such as ALLOW_2_SLASHES or NO_FRAGMENTS. > > > > >> > > > > >>However it appears from the code in > > > > >>ValidatorAction.getValidationClassInstance() that I can't actually > > set > > > > >>these at any point in the Validator framework so that they will be > > > > >>picked up when run under struts. > > > > >> > > > > >>I think I'm looking in the right place in the code. > > > > >> > > > > >>I was hoping that there would be some method for configuring this > > via > > > > >>validation.xml, but apparently not. > > > > >> > > > > >>Am I correct? > > > > >> > > > > >>Thanks > > > > >>Adam > > > > >> > > > > >>-- > > > > >>struts 1.1 + tomcat 5.0.16 + java 1.4.2 > > > > >>Linux 2.4.20 Debian > > > > >> > > > > >> > > > > > > >>--------------------------------------------------------------------- > > > > >>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] > > > > > > > > > > > > > > > > > > > > > > -- > > > > struts 1.2 + tomcat 5.0.19 + java 1.4.2 > > > > Linux 2.4.20 Debian > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > > > > === message truncated === > > > __________________________________ > Do you Yahoo!? > Yahoo! Small Business $15K Web Design Giveaway > http://promotions.yahoo.com/design_giveaway/ > > --------------------------------------------------------------------- > 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]