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]