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]