Paul, You shouldn't keep an instance of SimpleDateFormat as an instance variable even though you are only using the parse method. The reason is that the SimpleDateFormat class is not thread-safe. This is caused by the fact that the DateFormat class isn't threadsafe due to the fact that a value (the date portion of calendar) used only for the duration of a single public method (parse) in is stored as a member variable. (This design flaw was inspired by another design flaw of a similar nature in Calendar, but let's not go there.) See: http://developer.java.sun.com/developer/bugParade/bugs/4093418.html http://developer.java.sun.com/developer/bugParade/bugs/4228335.html http://developer.java.sun.com/developer/bugParade/bugs/4261469.html
So to fix your code, you'd have to put it as a member variable, thus incurring the overhead of the object creation each time. This problem would be very hard to uncover if it went into production. Regards, Richard --- Paul Barry <[EMAIL PROTECTED]> wrote: > This seems to work pretty well: > > private Date dateOfBirth; > private static final DateFormat dateOfBirthFormat = > new SimpleDateFormat("MM/dd/yyyy"); > > public Date getDateOfBirth() { > return dateOfBirth; > } > > public void setDateOfBirth(Date dateOfBirth) { > this.dateOfBirth = dateOfBirth; > } > > public String getDateOfBirthString() { > return dateOfBirthFormat.format(dateOfBirth); > } > > public void setDateOfBirthString(String > dateOfBirthString) > throws ParseException { > this.dateOfBirth = > dateOfBirthFormat.parse(dateOfBirthString); > } > > And then I use dateOfBirthString as the property in > the <html:text> tag. > I'll also create a rule in the validator to make > sure that > dateOfBirthString is the right format, so the > ParseException never happens. > > Christian Bollmeyer wrote: > > > On Friday 09 April 2004 21:19, Paul Barry wrote: > > > > Generally, it's a good idea to have only String > and boolean > > properties in an ActionForm and convert the > information > > gathered for further processing lateron. For > complex > > validations (like Dates), I usually check in > validate() if > > the value entered can be successfully converted > via > > SimpleDateFormat and do the actual conversion when > > populating the VO bean. But you can have 2 > properties > > in the form as well. > > > > HTH, > > -- Chris. > > > > BTW, as such conversions are needed quite often, > > it's a good idea to write a small utility function > that > > does the conversion check and put it in either > > your BaseActionForm or some general utility class. > > > > > >>Yeah, I guess I could do that. I think need 2 > properties. I would > >>create a dateAsString property, have the form get > and set that, and > >>then have the getters and setters set and convert > the actual Date. > >>This way I can call getDate to get a Date and > getDateAsString to get > >>it as a formatted String. > >> > >>Are their other ways to handle this, so I don't > need 2 properties? > >> > >>Slattery, Tim - BLS wrote: > >> > >>>>ActionForm has a object that has a Date property > that I want to > >>>>set. > >>>> > >>>>So I have > >>>> > >>>><html:text property="object.date"> > >>>> > >>>>If I populate the that property in the Action > like this: > >>>> > >>>>MyObject obj = new MyObject(); > >>>>obj.setDate(new Date()); > >>>>form.setObject(obj); > >>>> > >>>>The html:text tag does a toString() on the > object.date property. > >>>>How can I get it to display in the MM/DD/YYYY > format instead? > >>>>Likewise, how > >>>>do I make it so the user can enter a date in the > format of > >>>>MM/DD/YYYY and have it correctly set the Date > property? > >>> > >>>I'd have the getter format the Date as a string > (use > >>>SimpleDateFormat.format(), you can specify any of > a wide variety of > >>>formats). Likewise, the setter should accept a > string and use > >>>SimpleDateFormat.parse() to turn it into a Date. > If parse() returns > >>>null then the String could not be turned into a > Date, and you need > >>>to display an error message. > >>> > >>> > >>>------------------------------------------------------------------- > >>>-- To unsubscribe, e-mail: > [EMAIL PROTECTED] For > >>>additional commands, e-mail: > [EMAIL PROTECTED] > >> > >>--------------------------------------------------------------------- > >>To unsubscribe, e-mail: > [EMAIL PROTECTED] > >>For additional commands, e-mail: > [EMAIL PROTECTED] > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: > [EMAIL PROTECTED] > > For additional commands, e-mail: > [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [EMAIL PROTECTED] > For additional commands, e-mail: > [EMAIL PROTECTED] > __________________________________ Do you Yahoo!? Yahoo! Small Business $15K Web Design Giveaway http://promotions.yahoo.com/design_giveaway/ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]