How to input Date to a Struts2 action from a jsp?
java, jsp, struts2
Solution
I know this post is a bit old but a solution may be useful to others.
The default converter of Struts does not seem to work properly. The field error even occurs with readonly fields populated from the action.
I resolved it by defining my own converter:
Create the converter class (using the date format you need):
public class StringToDateTimeConverter extends StrutsTypeConverter {
// WARNING not safe in multi-threaded environments
private static final DateFormat DATETIME_FORMAT = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
public Object convertFromString(Map context, String[] strings, Class toClass) {
if (strings == null || strings.length == 0 || strings[0].trim().length() == 0) {
return null;
}
try {
return DATETIME_FORMAT.parse(strings[0]);
} catch (ParseException e) {
throw new TypeConversionException("Unable to convert given object to date: " + strings[0]);
}
}
public String convertToString(Map context, Object date) {
if (date != null && date instanceof Date) {
return DATETIME_FORMAT.format(date);
} else {
return null;
}
}
}
Put the conversion annotation on the property setter (or use a conversion.properties file)
@Conversion()
public class MyEditAction {
// ...
@TypeConversion(converter="my.app.common.converter.StringToDateTimeConverter")
public void setUploadedDate(Date uploadedDate) {
this.uploadedDate = uploadedDate;
}
In my case I did not need to edit it but wanted to specify the format in the jsp. I used an additional hidden field to keep the original value (another alternative would have been the use of Preparable interface):
<s:textfield name="uploadedDateDisplay" value="%{getText('format.datetimesecond',{uploadedDate})}" size="70" disabled="true"/>
<s:hidden name="uploadedDate" />
Problem
I am facing a lot of problems here in my jsp page. What tag I should use to get a date (yyyy-MM-dd) from user and store it in a Date property of a Struts2 action ? The property in my action is declared to be of java.util.Date. I want the input from jsp page to land in this property. please help. I get Invalid field error (in JSP) if is use a s:textfield tag to manyally enter a date in the right format.