Hi Niall,

thanks again for the quick response.

I've been looking at the struts and validator source and have a couple of ideas for a solution to my problem.

1) just create an appropriate validator and execute it. Simpler but doesn't 'feel' as good.

IntegerValidator validator = IntegerValidator.getInstance();

Integer fooInteger = validator.validate(fooString, "#,##0.00", Locale.GERMAN);
      if (fooInteger == null) {
          // error...not a valid Integer
          return;
      }

2) get the existing validator for the form and add the appropriate validator, so all of the form validations are executed i.e. from the config and additional validations.

Validator validator = Resources.initValidator(validationKey,
                      this,
                      application, request,
                      errors, page);
*pseudocode*
validator.add(fooBarValidator,..,...,..)
validator.validate();

this feels better as the existing framework is responsible for executing all validations, assembling cumulative errors and creating localised messages. I'm just not sure it's possible to add validations.

I think I may have to clone form validators so that adding validations to the validator doesn't affect subsequent validations on forms with the same name.

any chance you can point me in the right direction before I waste 2 days trying something impossible :)

cheers
Nathan


Niall Pemberton wrote:
On 2/9/07, Nathan Coast <[EMAIL PROTECTED]> wrote:
thanks Niall,

I've had a look at the examples and I'm not sure they demonstrate what I
need.  The examples all seem to be simple boolean expressions e.g.

       <field property="address1" depends="validwhen">
         <arg key="validWhenForm.address1" />
         <var>
           <var-name>test</var-name>
           <var-value>( (*this* != null) or
                      ( (address2 == null) and
                      ( (city == null) and
                        (zip == null) )))</var-value>
         </var>
       </field>

I have a select (fieldB) that determines the type of fieldA. So the
validation to operate on fieldA depends on the value of fieldB.

       <field property="fieldA" depends="validwhen,required">
         <arg key="form.fieldA" />
         <var>
           <var-name>test</var-name>
           <var-value>
      ((fieldB == 'java.lang.Integer') && validateInteger(fieldA))
   || ((fieldB == 'java.lang.Float') && validateFloat(fieldA))
   || ((fieldB == 'java.util.Date') && validateDate(fieldA))
etc....
         </var>
       </field>

The above looks like JavaScript - because validwhen is server side
only. Either way validwhen doesn't cater for doing different types of
validation (e.g. integer, float etc) depending on a value.

is this possible?  I'm thinking not, so a custom validation method is
probably what I need.

Looks like it

Niall

cheers
Nathan


Niall Pemberton wrote:
> On 2/9/07, Nathan Coast <[EMAIL PROTECTED]> wrote:
>> Hi,
>>
>> I have two fields in a form.  I believe the validwhen rule executes a
>> specific rule (e.g. required) on field a based upon the value of field
>> b. The situation I have is that I need to execute different validations
>> on field a determined by the value of field b.
>
> Yes - theres a validwhen example page in the struts-examples webapp in
> the binary distro (see the validation module).
>
>> Is this possible client side with the latest validator framework
>> (1.3.1)? or will I have to implement this functionality in the validate
>> method of the form (server side)?
>
> validwhen is server side only.
>
> Its also a custom Struts validator - not part of Commons Validator so
> in that respect the version of Commons Validator is not relevant.
>
> Niall
>
>> cheers
>> Nathan
>>
>>
>> ---------------------------------------------------------------------
>> 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]

Reply via email to