You don't need your own describe method anymore. BeanUtils has added the capability to register conversion methods, to go from String to any arbitrary object. So for example, I have a MSCalendar object whose toString puts out mm/dd/yyyy format, and can take that same format in a constructor.
The MSConverter (attached) is mostly copied from one of Craig's converters in the Commons BeanUtils package. public void testStuff() { Map map = null; int i; // Register converters that enable conversion of String properties // to a designated class. String->MSCalendar ConvertUtils.register(new MSCalendarConverter(), MSCalendar.class); EmployeeBean emp = new EmployeeBean(); emp.setFirstName("Joe"); emp.setLastName("Klein"); emp.setBirthDate(new MSCalendar("1/1/1999")); EmployeeFormBean form = new EmployeeFormBean(); try { // Copy all properties of an EmployeeBean to the corresponding // properties of an EmployeeFormBean. // This process uses the toString() method of each // property in EmployeeBean as the value to put into // the corresponding String property in the form. map = BeanUtils.describe(emp); BeanUtils.populate(form, map); // Conversely, copy all the properties from the form into // the corresponding properties of EmployeeBean, converting // from String to the taget object type. emp = new EmployeeBean(); map = BeanUtils.describe(form); BeanUtils.populate(emp, map); } catch(Exception ex) { fail("failure:"+ex.getStackTrace()); } } } DHS Struts wrote: > I was wondering if anyone had a custom describe method they would be > willing to share as an example of what Ted Husted describes in his > "Struts Catalog" in the 'Use a "populate" utility to exchange data with > value objects' section? > > I understand the basic concept of needing to write my own describe() for > those beans that have Date attributes (because the BeanUtil.populate() > can't handle them), but I am not having much luck getting it to work. > > If you have some code and are willing to share I would appreciate it. > Also, if you would like to see what I have attempted I can post that > here as well. > > Thank you in advance, > > mark n. > > _________________________________________________________________ > Chat with friends online, try MSN Messenger: http://messenger.msn.com > > > -- > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> >
package edu.umich.umms.beanutils; import java.sql.Date; import org.apache.commons.beanutils.ConversionException; import org.apache.commons.beanutils.Converter; /** * <p>Standard {@link Converter} implementation that converts an incoming * String into a <code>edu.umich.umms.util.MSCalendar</code> object, optionally using a * default value or throwing a {@link ConversionException} if a conversion * error occurs.</p> * */ public final class MSCalendarConverter implements Converter { // ----------------------------------------------------------- Constructors /** * Create a {@link Converter} that will throw a {@link ConversionException} * if a conversion error occurs. */ public MSCalendarConverter() { this(null); } /** * Create a {@link Converter} that will return the specified default value * if a conversion error occurs. * * @param defaultValue The default value to be returned */ public MSCalendarConverter(Object defaultValue) { this.defaultValue = defaultValue; } // ----------------------------------------------------- Instance Variables /** * The default value specified to our Constructor, if any. */ private Object defaultValue = null; // --------------------------------------------------------- Public Methods /** * Convert the specified input object into an output object of the * specified type. * * @param type Data type to which this value should be converted * @param value The input value to be converted * * @exception ConversionException if conversion cannot be performed * successfully */ public Object convert(Class type, Object value) { if (value == null) { if (defaultValue != null) { return (defaultValue); } else { throw new ConversionException("No value specified"); } } try { return new edu.umich.umms.util.MSCalendar((String) value); // return (Date.valueOf((String) value)); } catch (Exception e) { if (defaultValue != null) { return (defaultValue); } else { throw new ConversionException(e); } } } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>