Сохраняйте sj:datepicker как отметку времени

У меня есть поле ввода:

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

где exam.endDate - это объект java.sql.Timestamp с соответствующими методами получения и установки. Экзамен - это сущность, хранящаяся в таблице, а столбец для 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 ответ

Оказывается, перехватчик параметра 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);
        }
    }

}
Другие вопросы по тегам