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]