如何正确地重新填充<sj:datepicker timepicker =“true”>?</sj:datepicker>

时间:2014-12-18 10:36:36

标签: jsp struts2 datetimepicker struts2-jquery struts2-jquery-plugin

我正在使用Struts2-jQuery Datepicker with the Timepicker Addon

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

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

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

1 个答案:

答案 0 :(得分: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);
}

但是由于上面提到的错误,这两种方法都不起作用。解决方案非常简单,让我在上一次对这个问题的评论中大笑:

解决方案

使用字符串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小时显示格式时才需要更改它。