好的,我已经找到时间扩展我在 12 月 18 日想出的解决方案,并在评论中简要提及。
问题
该<sj:datepicker timepicker="true">
标签正确地解析了一个 Date 对象,但不是它的 String 表示。这在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
一个:
<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;
}
如果您需要 Date(您可能需要),您可以使用 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 小时显示格式时才需要更改它。