I didn't see Struts2 provide a good DateConverter implementation, so I wrote my own. It also use ResourceBundle to work with i18n requirements. Below is my DateConverter.java, and don't forget to add your own package path.
import java.text.ParseException;
import java.util.Date;
import java.util.Map;
import java.util.ResourceBundle;
import org.apache.struts2.util.StrutsTypeConverter;
import util.DateUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
public class DateConverter extends StrutsTypeConverter {
private static Logger LOG = LoggerFactory.getLogger(DateConverter.class);
@Override
/**
* Converts one or more String values to the specified class.
*
* @param context the action context
* @param values the String values to be converted, such as those submitted from an HTML form
* @param toClass the class to convert to
* @return the converted object
*/
public Object convertFromString(Map context, String[] values, Class toClass) {
Date returnObject = null;
String value = values[0];
if (value != null && !value.trim().equals("")) {
try {
returnObject = DateUtil.parseDate(value, getDatePattern());
} catch (ParseException e) {
// Just to ignore the parse exception
}
}
return returnObject;
}
@Override
/**
* Converts the specified object to a String.
*
* @param context the action context
* @param o the object to be converted
* @return the converted String
*/
public String convertToString(Map context, Object o) {
Date date = (Date) o;
String formatedDate = DateUtil.dateFormater(date, getDatePattern());
return formatedDate;
}
private String getDatePattern() {
ResourceBundle bundle = ResourceBundle.getBundle("package", ActionContext.getContext().getLocale());
String pattern = bundle.getString("text.date.format");
//LOG.info("current date pattern is:" + pattern);
return pattern;
}
}
Please don't forget to add "xwork-conversion.properties" and "package.properties" at your source folder root.
"xwork-conversion.properties" content should be
java.util.Date = DateConverter
"package.properties" content should be
text.date.format=MM/dd/yyyyor other format pattern for different locale. For example package_zh_TW.properties or package_ja_JP.properties.
With this DateConverter, you can see different Date conversion result for your locale setting.