Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » Struts 2 »

Re: type validwhen validation

Nathan Coast

2007-02-09

Replies:

apologies if this is a dumb question, but how come there is no
validateBoolean?

Niall Pemberton wrote:
> On 2/9/07, Nathan Coast <nathan@(protected):
>> 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.
>
> As you say option 1 is simple and I guess it depends whether this is a
> "one off" or you need to re-use it in more than one place?
>
> Assuming the later - you would need to clone since changing the
> configuration for a set of form validation rules will affect them all.
> You would also need to set up any custom messages (<msg> and <arg>
> elements) unless a generic message (no label) would do for all. IMO it
> would be more straight forward to write a custom validator that
> delegates to the others
>
> public static Object validateConditional (
>     Object bean,
>     ValidatorAction va,
>     Field field,
>     ActionMessages errors,
>     Validator validator,
>     HttpServletRequest request) {
>
>   if (??? Short ???) {
>     return FieldChecks.validateShort(bean, va, field, errors,
> validator, request);
>   } else if (??? Integer???) {
>     return FieldChecks.validateInteger(bean, va, field, errors,
> validator, request);
>   } else if (??? Double???) {
>     return FieldChecks.validateDouble(bean, va, field, errors,
> validator, request);
>   } else if (??? Date???) {
>     return FieldChecks.validateDate(bean, va, field, errors,
> validator, request);
>   } else if ...
>   }
>
> }
>
> That way you could configure messages/arguments in you validation.xml as
> usual:
>
>   <field property="foo" depends="conditional">
>     <msg name="short"  key="foo.short.error">
>     <msg name="integer" key="foo.integer.error">
>     <msg name="double" key="foo.double.error">
>     <msg name="date" key="foo.date.error">
>     <arg0 key="Foo Label" resource="false">
>    
> <var><var-name>datePattern<var-name><var-value>dd/MM/yyyy<var-value></var>
>   </field>
>
> Need to remember to configure your "conditional" validator:
>
> <validator name="conditional"
>             classname="myPackage.MyValidations"
>             method="validateConditional"
>             methodParams="java.lang.Object,
>               org.apache.commons.validator.ValidatorAction,
>               org.apache.commons.validator.Field,
>               org.apache.struts.action.ActionMessages,
>               org.apache.commons.validator.Validator,
>               javax.servlet.http.HttpServletRequest"
>             depends=""
>             msg="default,msg"/>
>
> Not something I've done though, so just shooting from the hip.
>
> Niall
>
>> 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 <nathan@(protected):
>> >> 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 <nathan@(protected):
>> >> >> 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: user-unsubscribe@(protected)
>> >> >> For additional commands, e-mail: user-help@(protected)
>> >> >>
>> >> >>
>> >> >
>> >> >
>> ---------------------------------------------------------------------
>> >> > To unsubscribe, e-mail: user-unsubscribe@(protected)
>> >> > For additional commands, e-mail: user-help@(protected)
>> >> >
>> >> >
>> >> >
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: user-unsubscribe@(protected)
>> >> For additional commands, e-mail: user-help@(protected)
>> >>
>> >>
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: user-unsubscribe@(protected)
>> > For additional commands, e-mail: user-help@(protected)
>> >
>> >
>> >
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@(protected)
>> For additional commands, e-mail: user-help@(protected)
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@(protected)
> For additional commands, e-mail: user-help@(protected)
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@(protected)
For additional commands, e-mail: user-help@(protected)

©2008 junlu.com - Jax Systems, LLC, U.S.A.