This shoud do it. Isn't it?

private static PersonFormBean getPersonFormBean(Object bean, String property)
throws java.lang.IllegalAccessException,
java.lang.reflect.InvocationTargetException,
java.lang.NoSuchMethodException{
   
   return (PersonFormBean) BeanUtils.getProperty(bean, property);
}





On Tue, 11 Jan 2005 11:39:53 -0000, Daffin, Miles (Company IT)
<[EMAIL PROTECTED]> wrote:
> Dear All,
> 
> I have a DynaValidatorActionForm like this:
> 
> <form-beans>
>    <form-bean name="theFormBean"
> type="org.apache.struts.validator.DynaValidatorActionForm">
>        <form-property name="simpleProperty" type="java.lang.String" />
>        <form-property name="personList" type="java.util.ArrayList"
> size="0" />
>        <form-property name="newPerson"
> type="com.plok.validator.beans.PersonFormBean"/>
>    </form-bean>
> </form-beans>
> 
> When the related form is submitted the action adds the 'newPerson' to
> the 'personList' and replaces newPerson, on the DynaBean, with a new
> PersonFormBean. This all works fine. Now I want to add declarative
> validation for the newPerson, so only valid newPersons reach the action
> code that adds them to the list.
> 
> The thing is that PersonFormBeans (in this example) have a start and end
> date (a period). The validation rules for these fields are:
> * start date and end date must be dates (dd/MM/yyyy)
> * start date must be before end date
> * end date must be after or equal to today
> * etc...
> 
> So, you see, apart from the first rule, this goes beyond what can be
> achieved by plucking out the fields from the nested bean and using the
> default set of simple field validators shipped with struts (required,
> date etc.). (Even if you disagree that these validation requirements
> cannot be met in using the default validators please read on. This is
> just an example.)
> 
> I have created a new validator that I want to handle the entire nested
> PersonFormBean: personValidator.
> 
> <validator
>    name="personValidator"
>    classname="com.plok.validator.beans.PersonFormBeanValidator"
>    method="validatePerson"
>    methodParams="java.lang.Object,
>                  org.apache.commons.validator.ValidatorAction,
>                  org.apache.commons.validator.Field,
>                  org.apache.struts.action.ActionErrors,
>                  javax.servlet.http.HttpServletRequest"
>    msg="errors.person">
> </validator>
> 
> public static boolean validatePerson(Object bean, ValidatorAction va,
> Field field, ActionErrors errors, HttpServletRequest request)
> {
>    PersonFormBean personFormBean =
> somehowGetTheBloodyPersonFormBeanOffTheBean(bean);
>    // Do the validation directly on the personFormBean.
>    return true;
> }
> private static PersonFormBean
> somehowGetTheBloodyPersonFormBeanOffTheBean(Object bean)
> {
>    // How do I implement this?
>    // It has to be generic, in case I change my mind about the type of
> the bean,
>    // e.g. make it a simple bean with getters and setters instead of
> using the DynaBean...
>    return null;
> }
> 
> Would you:
> a) grab the nested PersonFormBean from the main, parent bean and then
> work directly with this? If so how? Is there a utility method somewhere?
> b) grab individual fields from the nested bean using BeanUtils methods
> (or other - feel free to advise).
> 
> Your thoughts/urls would be appreciated.
> 
> Many thanks.
> 
> -Miles
> 
> Miles Daffin
> Morgan Stanley
> 20 Cabot Square | Canary Wharf | London E14 4QA | UK
> Tel: +44 (0) 20 767 75119
> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
> --------------------------------------------------------
> 
> NOTICE: If received in error, please destroy and notify sender.  Sender does 
> not waive confidentiality or privilege, and use is prohibited.
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to