The exception happens before validation.

I aksed the same question before and I didn't get a clean solution yet, so
far, if you define it as a java.sql.Timestamp, you have to provide an input
in yyyy-mm-dd hh:mm:ss.fffffffff format

Did you try beanDef?

Or maybe you can change the default RequestProcessor to your own
RequestProcessor and when populating the actionForm form-bean, use
LocaleBeanUtil instead of BeanUtil, but I haven't done that yet.

Please let me know when you got something done since I am also struggling
with this. Thanks

Regards

On 11/17/05, Jesus Salvo Jr. <[EMAIL PROTECTED]> wrote:
>
>
> 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(
> SqlDateConverter.java:117)
> at org.apache.commons.beanutils.ConvertUtilsBean.convert(
> ConvertUtilsBean.java:428)
> 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.java: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]
>
> --
> Jesus M. Salvo Jr.
> Senior Technical Consultant
>
> COMMUNICATOR INTERACTIVE
>
> www.communicator.com.au <http://www.communicator.com.au>
> P +6129256 0914 F +612 9256 0922 M +61 409126699
> Level 8, 9-13 Young Street, Circular Quay, Sydney. 2000
> Copyright Communicator InteractivePty Limited 2005
> CONFIDENTIAL INFORMATION owned exclusively by Communicator Interactive Pty
> Limited. The information in this email and any attachments is privileged and
> confidential, intended only for the use of the recipient or the intended
> recipient. If you are not the intended recipient, any use of the information
> is strictly prohibited. If you have received this communication in error,
> please inform us immediately and delete the message and any attachments.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


--
Yujun Liang
[EMAIL PROTECTED]

Reply via email to