用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.ParseException;
 import java.text.SimpleDateFormat;
import java.text.SimpleDateFormat;
 import java.util.Date;
import java.util.Date;
 import java.util.Map;
import java.util.Map;

 import org.apache.log4j.Logger;
import org.apache.log4j.Logger;

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

 public class DateConverter
public class DateConverter
 extends WebWorkTypeConverter
        extends WebWorkTypeConverter


 {
{
 private static final Logger log = Logger.getLogger( DateConverter.class );
    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 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(
    private final static SimpleDateFormat sdf_time = new SimpleDateFormat(
 "yyyy-MM-dd HH:mm" );
            "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 String regex_date = "[0-9]{2,4}-[0-9]{1,2}-[0-9]{1,2}";

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

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

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

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

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

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

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

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

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

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

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

 return results;
        return results;
 }
    }

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

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

 return null;
        return null;
 }
    }

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

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

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

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

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

 
     {
{
 System.out.println( "2006-07-11".matches( regex_date ) );
        System.out.println( "2006-07-11".matches( regex_date ) );
 System.out.println( "2006-07-11 00:21".matches( regex_time ) );
        System.out.println( "2006-07-11 00:21".matches( regex_time ) );
 }
    }
 }
}要让这个类来代替webwork默认的转换你还需要在classpath目录, 一般就是classes目录放置配置文件
xwork-conversion.properties:
 java.util.Date=DateConverter
java.util.Date=DateConverter这种方法是对整个application起作用,.
如果要只对单个action起作用, 在action同一个package写一个ActionClassName-conversion.properties:
 startDate=DateConverter
startDate=DateConverter