1

我将Struts2-jQueryDatepickerTimepickerAddon一起使用。

假设从getter 方法java.util.Date返回一个对象:Action getMyDate()

<sj:datepicker displayFormat="dd/mm/yy" 
            timepickerFormat="HH:mm"
                  timepicker="true" 
                        name="myDate" />

这始终会导致正确填充日期,但timepicker始终是00:00.

4

1 回答 1

1

好的,我已经找到时间扩展我在 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 小时显示格式时才需要更改它。

于 2014-12-18T10:38:25.907 回答