Сохраняйте 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);
}
}
}