I'm not sure if this is what you're looking for, but I just have a setStrDate(String strDate) method and do the conversion yourself. Set your form property to strDate. First test for nullness (if such a thing exists) and set the date to something your validation rules will pickup.
Z. > > Thanks ... I sort of worked around it by using java.sql.Date instead, > since the built-in converts in commons-beanutils does not really have a > java.util.Date converter, > only a java.sql.Date converter. > > However, I still have one problem with this. > > If a user leave the date field empty in the form, you will get the exception > below. > > The problem with this it seems that the conversion happens BEFORE the > validation. > What's the point of having the following in validation.xml, if this exception > happens earlier ?? > > <field > property="preLiveDate" > depends="required,date"> > <arg key="campaignForm.preLiveDate"/> > > <var><var-name>datePattern</var-name><var-value>yyyy-MM-dd</var-value></var> > </field> > > > org.apache.commons.beanutils.ConversionException > at > org.apache.commons.beanutils.converters.SqlDateConverter.convert(SqlDateConver > ter.java:117) > at > org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:42 > 8) > at > org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1004> ) > at > org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811) > at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298) > at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493) > at > org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.jav > a:805) > at > org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203) > > > > On Thursday 17 November 2005 16:13, Yujun Liang wrote: >> Here is some replies when I asked the same question before, hope it helps. >> >> Regards >> ----- Original Message ----- >> From: "JEROME RAULINE" <[EMAIL PROTECTED]> >> To: "Yujun Liang" <[EMAIL PROTECTED]> >> Sent: Friday, October 28, 2005 6:53 PM >> Subject: java.util.Date in Action Form Bean >> >>> Hi, >>> >>> You'd better use a String object, and then convert it into a >>> java.*.Date. This way, you can check the date format and tell the user >>> that it's wrong. Using a Date object, you'll have null if the format is >>> not corresponding. And then, you don't know if the user used a wrong >>> date or if he does not fill it out at all. >>> >>> Regards >>> >>> >>> I am working on a project using Struts. Struts uses BeanUtil to populate >> >> Action Form Bean. This is such a nice framework to work with, except, >> >>> BeanUtil doesn't support java.util.Date conversion. But when I use >> >> java.sql.Timestamp, it asks for the format of >> >>> yyyy-mm-dd hh:mm:ss.fffffffff >>> >>> Here is the exception when I enter other format, >>> >>> Caused by: java.lang.IllegalArgumentException: Timestamp format must be >> >> yyyy-mm-dd hh:mm:ss.fffffffff >> >>> In a web application, it is not reasonable to ask user to input >>> yyyy-mm-dd >> >> hh:mm:ss.fffffffff. >> >>> Also, it doesn't support Locale. >>> Do you have experience getting java.util.Date populated in a Java Bean >> >> inside a FormBean? >> >> >> >> >> ----- Original Message ----- >> From: "Laurie Harper" <[EMAIL PROTECTED]> >> To: <dev@struts.apache.org> >> Sent: Saturday, October 29, 2005 2:17 AM >> Subject: Re: java.util.Date in Action Form Bean >> >>> So far I'm doing this by registering a custom implementation of >>> Converter which I instantiate with a suitable instance of >>> SimpleDateFormat before calling BeanUtilsBean.copyProperties(). >>> >>> There's also the beanutils.locale package, which provides Locale-aware >>> conversions and includes support for java.util.Date (I think) out of the >>> box. Unfortunately, it's not obvious how to use it. I posted a thread on >>> the commons-user list asking for guidance, though I haven't seen a >>> response yet. >>> >>> For what it's worth, here's a rough outline of doing this the 'easy' >>> (i.e. inelegant!) way: >>> >>> final SimpleDateFormat sdf = ... >>> BeanUtilsBean utils = new BeanUtilsBean(); >>> ConvertUtilsBean ctuils = utils.getConvertUtils(); >>> cutils.register(new Converter() { >>> public Object convert(Class clazz, Object value) { >>> return sdf.parse((String) value); >>> }, >>> Date.class); >>> utils.copyProperties(... >>> >>> That's untested code, and the implementation of convert() should incude >>> checks for value being null, not a String, etc and handling for if the >>> date can't be parsed... but it gives you the rough idea. >>> >>> L. >> >> ----- Original Message ----- >> From: "Murray Collingwood" <[EMAIL PROTECTED]> >> To: "Struts Users Mailing List" <user@struts.apache.org> >> Sent: Friday, October 28, 2005 3:44 PM >> Subject: Re: java.util.Date in Action Form Bean >> >>> Hi >>> >>> I add additional getters and setters for handling dates and prices (and >> >> other special >> >>> numeric formats). For example, in addition to the normal getter I code an >> >> additional >> >>> one to retrieve the date as a string. >>> >>> public Date getDateStart() { >>> return dateStart; >>> } >>> public String getDateStartAsString() { >>> if (dateStart == null) return ""; >>> return Focus.date2String(dateStart); >>> } >>> >>> >>> I then code up some static methods to format dates to strings and similar >> >> methods to >> >>> make the opposite translation (string back to date). For example, a >>> method >> >> from my >> >>> Focus class related to the above code: >>> >>> public static String date2String(Date date) { >>> return sdf.format(date); >>> } >>> >>> And if you're desparate, here is the sdf definition: >>> >>> private static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); >>> >>> You can do the same thing with a Timestamp, depends how many fields you >> >> want to >> >>> declare on your form and how much data entry you want your user to do. I >> >> used a >> >>> similar method in my Focus class to get/set the date portion of the >> >> timestamp value: >>> public static String timestamp2String(Timestamp ts) { >>> if (ts == null) return ""; >>> return date2String(new Date(ts.getTime())); >>> } >>> >>> HTH >>> mc >> >> ----- Original Message ----- >> From: "Richard Yee" <[EMAIL PROTECTED]> >> To: "Struts Users Mailing List" <user@struts.apache.org> >> Sent: Saturday, October 29, 2005 12:48 AM >> Subject: Re: java.util.Date in Action Form Bean >> >>> You should be aware that when using a java.text.DateFormat class or its >>> subclass as a static variable in a bean that can be accessed via >>> multiple threads simultaneously, you need to synchronize access to it >>> because DateFormat is not thread-safe. So you should change the code >>> below to: >>> >>> public static synchronized String date2String(Date date) { >>> return sdf.format(date); >>> } >>> >>> or >>> >>> public static String date2String(Date date) { >>> synchronized (date) { >>> return sdf.format(date); >>> } >>> } >>> >>> >>> >>> This is from the DateFormat Javadoc:Synchronization >>> >>> Date formats are not synchronized. It is recommended to create separate >>> format instances for each thread. If multiple threads access a format >>> concurrently, it must be synchronized externally. >>> >>> Regards, >>> >>> Richard >> >> ----- Original Message ----- >> From: "Ryan Stewart" <[EMAIL PROTECTED]> >> To: <dev@struts.apache.org> >> Sent: Saturday, October 29, 2005 2:10 PM >> Subject: Re: java.util.Date in Action Form Bean >> >>> Not to mention that DateFormats are not thread-safe, and I'm fairly sure >>> Converter access is not synchronized. >>> >>>> ---- >> >> On 11/17/05, Jesus Salvo Jr. <[EMAIL PROTECTED]> wrote: >>> Struts 1.2.7 >>> >>> How do u use a ActionForm formbean with a java.util.Date as a property ? >>> The form bean is defined as follows in struts-config.xml: >>> >>> <form-bean name="campaignForm" type=" >>> com.mig.provisioning.CampaignForm"/> >>> >>> .. and the actual bean has the following methods: >>> >>> public void setLiveDate(Date liveDate) { >>> this.liveDate = liveDate; >>> } >>> public Date getPreLiveDate() { >>> return preLiveDate; >>> } >>> >>> >>> I am getting a the exception below: >>> >>> java.lang.IllegalArgumentException: Cannot invoke >>> com.mig.provisioning.CampaignForm.setPreLiveDate - argument type mismatch >>> at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod( >>> PropertyUtilsBean.java:1778) >>> at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty( >>> PropertyUtilsBean.java:1759) >>> at org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty ( >>> PropertyUtilsBean.java:1648) >>> at org.apache.commons.beanutils.PropertyUtilsBean.setProperty( >>> PropertyUtilsBean.java:1677) >>> at org.apache.commons.beanutils.BeanUtilsBean.setProperty( >>> BeanUtilsBean.java:1022) >>> at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java >>> >>> :811) >>> >>> at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298) >>> at org.apache.struts.util.RequestUtils.populate (RequestUtils.java:493) >>> at org.apache.struts.action.RequestProcessor.processPopulate( >>> RequestProcessor.java:805) >>> at >>> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java >>> >>> :203) >>> >>> at >>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) >>> at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java :716) at >>> javax.servlet.http.HttpServlet.service(HttpServlet.java:809) >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >> >> -- >> Yujun Liang >> [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]