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]



Reply via email to