坚持sj:datepicker作为时间戳

时间:2013-06-24 19:07:34

标签: java sql persistence struts2-jquery

我有一个输入字段:

<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。

1 个答案:

答案 0 :(得分: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);
        }
    }

}