我使用Struts 2 Jquery Date选择器来选择日期。
如下所示
<sj:datepicker name="testDate"
parentTheme="simple"
zindex="2006"
timepicker="true"
changeYear="true"
displayFormat="dd/mm/yy"
timepickerFormat="HH:mm:ss"
timepickerShowSecond="true"
duration="fast"
readonly="true"
></sj:datepicker>
如果您看到我提到的格式为dd/mm/yy
且时间格式为HH:mm:ss
,那么当用户选择日期时,此处一切正常..
当用户选择我获取日期的日期时我的Action类中的预期格式。但是当我在完成操作后重定向到同一页面时,我的日期选择器文本字段被设置为错误的格式,如mm/dd/yyy
..我希望我的日期datepickers格式设置为我在{{I}中提到的日期格式{1}}标记。
由于这个用户变得困惑,任何人都可以告诉我如何设置相同的格式,即使在操作完成后用户在操作之前选择的格式
我正在使用datepicker
答案 0 :(得分:3)
问题是因为根据dd/mm/yy
,struts2 jquery
不是有效格式。
有效格式为dd.mm.yy
或dd-mm-yy
根据此链接的有效格式为:Click here
DD.MM.YY
MM / DD / YY
DD,d MM yy
d M,yy
DD-MM-YY
他们说
displayFormat
- &gt;用于视觉显示格式化日期的模式,例如, YY- mm-dd,dd.mm.yy
但模式dd/mm/yy
不起作用。他们也没有在/
对displayFormat 的描述中指定dd/mm/yy
(Slash)。他们只指定了.
(点)和-
(短划线)。
我也试过dd//mm//yy
正在运作!!!
但不使用dd/mm/yy
:(
<强>原因:强>
datepicker无法解析字符串值dd/mm/yy
。它将dd/mm/yy
视为mm/dd/yy
。
对于某些值,它失败了,它将日期和月份之间的最大值视为两者都小于12的日期。
例如:
输入: 02/07/2014 09:30:41
displayFormat: dd / mm / yy
实际日期: 2
实际月份: 7
实际时间: 09:30:41
Parsedday: 7
Parsedmonth: 2
Parsedtime::00:00:00输出:07/02/2014 00:00:00
这是一个开放但仍未解决的问题。 Struts2 Jquery团队 接受,这是一个问题。此问题的状态已被接受。
以下是问题链接
Issue 1057 in struts2-jquery: datepicker can't parse a string value with a time component
我建议你使用
displayFormat = “DD-MM-YY”
解决您的问题或等待issue 1057解决。
根据我的研究,以下功能需要使用alert(err)进行调试;
解析的实际功能
//#######################################################################################
// Splits datetime string into date ans time substrings.
// Throws exception when date can't be parsed
// If only date is present, time substring eill be ''
//#######################################################################################
var splitDateTime = function(dateFormat, dateTimeString, dateSettings)
{
try {
var date = $.datepicker._base_parseDate(dateFormat, dateTimeString, dateSettings);
} catch (err) {
if (err.indexOf(":") >= 0) {
// Hack! The error message ends with a colon, a space, and
// the "extra" characters. We rely on that instead of
// attempting to perfectly reproduce the parsing algorithm.
var dateStringLength = dateTimeString.length-(err.length-err.indexOf(':')-2);
var timeString = dateTimeString.substring(dateStringLength);
return [dateTimeString.substring(0, dateStringLength), dateTimeString.substring(dateStringLength)];
} else {
throw err;
}
}
return [dateTimeString, ''];
};
源代码链接第1447行jquery-ui-timepicker-addon.js
//#######################################################################################
// override parseDate() because UI 1.8.14 throws an error about "Extra characters"
// An option in datapicker to ignore extra format characters would be nicer.
//#######################################################################################
$.datepicker._base_parseDate = $.datepicker.parseDate;
$.datepicker.parseDate = function(format, value, settings) {
var splitRes = splitDateTime(format, value, settings);
return $.datepicker._base_parseDate(format, splitRes[0], settings);
};
源代码链接:第1340行jquery-ui-timepicker-addon.js
答案 1 :(得分:0)
我认为通过使用Java Date(而不是String)设置Datepicker的值你应该没问题:
<sj:datepicker name="testDate"
value="%{testDateValue}"
...
></sj:datepicker>
并在动作类中:
public Date getTestDateValue()
{
try {
return new SimpleDateFormat("dd/MM/yy HH:mm:ss").parse(getTestDate());
} catch (ParseException e) {
return null;
}
}