0

我有一个输入字段:

<sj:datepicker readonly="true" name="exam.endDate" required="true" timepicker="true" timepickerAmPm="true" />

其中exam.endDate 是一个带有适当getter 和setter 的java.sql.Timestamp 对象。Exam 是存储在表中的实体,endDate 的列是 TIMESTAMP 类型。当我保留一个考试实体并稍后检索它时,我所有的值都只是日期,时间显示为 00:00。我如何存储时间组件?

这就是我显示日期的方式:

<s:date name="exam.endDate" format="dd/MM HH:mm" />

我得到类似的东西:“24/06 00:00”

我知道参数拦截器无法正常工作,因为当我DateFormat.getDateTimeInstance().format(exam.endDate)一进入操作就打印出来,无论我输入什么,它都会打印出 00:00。

4

1 回答 1

0

原来struts2参数拦截器不处理时间戳,所以我需要自己写。

public class MyTimeStampConverter extends StrutsTypeConverter {
    private static final SimpleDateFormat sdf = new SimpleDateFormat("<!--Desired Format here-->");

    @Override
    public Object convertFromString(Map context, String[] values, Class toClass) throws TypeConversionException {
        try{
               if (values == null || values.length == 0) {
                    return null;
                }
               return new java.sql.Timestamp(sdf.parse(values[0]).getTime());
        }catch(Exception e){        
            throw new TypeConversionException(e);
        }
    }

    @Override
    public String convertToString(Map context, Object object)  throws TypeConversionException  {
        try{
            if(object instanceof Timestamp){
                return sdf.format(new Date(((Timestamp)object).getTime()));
            }
            return "";
        }catch(Exception e){
            throw new TypeConversionException(e);
        }
    }

}
于 2013-06-25T15:13:38.987 回答