Ответ 1
Хорошо, я нашел время для расширения решения, которое я выяснил 18 декабря, и кратко упомянул в комментариях.
Проблема
Тег <sj:datepicker timepicker="true">
корректно анализирует объект Date, но не его строковое представление. Об этом сообщается в Issue 1057, при этом статус принят, но все еще не исправлен.
Этот работает:
<sj:datepicker displayFormat="dd/mm/yy"
timepicker="true"
value="%{new java.util.Date()}" />
Этот НЕ работает:
<sj:datepicker displayFormat="dd/mm/yy"
timepicker="true"
value="%{'07/01/2015 14:42'}" />
Если вы не используете конвертер, вам нужно отправить формат даты-времени в переменную String
, а не в Date
one:
<sj:datepicker displayFormat="dd/mm/yy"
timepicker="true"
name="dateStr" />
private String dateStr;
public void setDateStr(String dateStr){
this.dateStr = dateStr;
}
public String getDateStr(){
return dateStr;
}
Если вам нужна дата (возможно, вы это делаете), вы можете использовать String Getter и Setter, который будет обрабатывать разбор и форматирование между Date и String:
private static final String FORMAT = "dd/MM/yyyy HH:mm";
private Date date;
public void setDateStr(String dateStr){
date = new SimpleDateFormat(FORMAT,Locale.ITALIAN).parse(dateStr);
}
public String getDateStr(){
return new SimpleDateFormat(FORMAT,Locale.ITALIAN).format(date);
}
Но оба этих метода из-за ошибки, связанной выше, не будут работать. Решение так просто, что заставило меня рассмеяться в моем последнем комментарии к вопросу:
Решение
Используйте String setter и Date getter, тогда он будет работать отлично:
<sj:datepicker displayFormat="dd/mm/yy"
timepicker="true"
name="dateStr"
value="date" />
private Date date;
public void setDateStr(String dateStr){
date = new SimpleDateFormat(FORMAT,Locale.ITALIAN).parse(dateStr);
}
public Date getDate(){
return date;
}
(или напишите конвертер).
Боковое примечание: timepickerFormat="HH:mm"
не требуется, потому что HH:mm
(формат 24 часа) уже является стандартным форматом. Вам нужно изменить его только в том случае, если вам нужен формат отображения 12 часов.