Sorry for the outrageoulsy long-winded question. It really boiled down
to this: how to get the PersonFormBean off the Object bean generically.
The answer is to use PropertyUtils.getSimpleProperty(...).
(BeanUtils.getProperty returns a String.)

MD

> -----Original Message-----
> From: Kishore Senji [mailto:[EMAIL PROTECTED] 
> Sent: 11 January 2005 18:58
> To: Struts Users Mailing List
> Subject: Re: Validating DynaBean nested beans with a custom validator.
> 
> 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]
> 
> 
--------------------------------------------------------
 
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