用webwork的datepicker時, 如果格式是"%Y-%m-%d"工作很正常, 但是有些格式需要帶上時間的:
"%Y-%m-%d?%H:%M", 這時用webwork默認的類型轉換就不行了,需要自己實現, 根據javaeye論壇某高手的建議用正則表達式來判斷form傳過來的日期字符串是"%Y-%m-%d"還是"%Y-%m-%d?%H:%M",再用相應的SimpleDateFormat來parse分析字符串生成Date對象, 代碼如下:

import?java.text.ParseException;
import?java.text.SimpleDateFormat;
import?java.util.Date;
import?java.util.Map;

import?org.apache.log4j.Logger;

import?com.opensymphony.webwork.util.WebWorkTypeConverter;

public?class?DateConverter
????????extends?WebWorkTypeConverter


{
????private?static?final?Logger?log?=?Logger.getLogger(?DateConverter.class?);

????private?final?static?String?regex_time?=?"[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2}?[0-9]{1,2}:[0-9]{1,2}";

????private?final?static?SimpleDateFormat?sdf_time?=?new?SimpleDateFormat(
????????????"yyyy-MM-dd?HH:mm"?);

????private?final?static?String?regex_date?=?"[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2}";

????private?final?static?SimpleDateFormat?sdf_date?=?new?SimpleDateFormat(
????????????"yyyy-MM-dd"?);

????@Override?public?Object?convertFromString(?Map?context,?String[]?values,
????????????Class?toClass?)

????
{
????????if?(?values.length?==?1?)

????????
{
????????????Date?date?=?null;
????????????try

????????????
{
????????????????date?=?convertToDate(?values[0]?);
????????????}
????????????catch?(?ParseException?e?)

????????????
{
????????????????log.warn(?e.getMessage()?);
????????????}
????????????return?date;
????????}

????????Date[]?results?=?new?Date[values.length];

????????for?(?int?i?=?0;?i?<?values.length;?i++?)

????????
{
????????????String?value?=?values[i];
????????????try

????????????
{
????????????????results[i]?=?convertToDate(?value?);
????????????}
????????????catch?(?ParseException?e?)

????????????
{
????????????????log.warn(?e.getMessage()?);
????????????}
????????}

????????return?results;
????}

????private?Date?convertToDate(?String?value?)
????????????throws?ParseException

????
{
????????if?(?value.matches(?regex_time?)?)
????????????return?sdf_time.parse(?value?);
????????else?if?(?value.matches(?regex_date?)?)
????????????return?sdf_date.parse(?value?);

????????return?null;
????}

????@Override?public?String?convertToString(?Map?context,?Object?o?)

????
{
????????if?(?o?instanceof?Date?)

????????
{
????????????Date?date?=?(Date)?o;
????????????return?sdf_time.format(?date?);
????????}

????????return?o.toString();
????}

????public?static?void?main(?String[]?args?)

????
{
????????System.out.println(?"2006-07-11".matches(?regex_date?)?);
????????System.out.println(?"2006-07-11?00:21".matches(?regex_time?)?);
????}
}
要讓這個類來代替webwork默認的轉換你還需要在classpath目錄, 一般就是classes目錄放置配置文件
xwork-conversion.properties:
java.util.Date=DateConverter這種方法是對整個application起作用,.
如果要只對單個action起作用, 在action同一個package寫一個ActionClassName-conversion.properties:
startDate=DateConverter