奇怪的富有:日历错误

时间:2011-03-01 18:14:23

标签: calendar richfaces

我使用了富日历控件,启用了手动建议,日期字符串为" dd MMM yyyy"。类似的东西:

<rich:calendar id="calStartDateTime" label="Test Calendar" 
popup="true" datePattern="dd MMM yyyy" />

我们的QA部门发现了一个奇怪的小怪癖。如果您键入所有大写月份的日期,例如&#34; 2011年3月15日&#34;,然后弹出日历控件,则日历会跳出。它显示&#34; undefined&#34;这个月和&#34; NaN&#34;这一年,每月的日期从1到42填写。

enter image description here

我还没有在任何地方发现此错误,但我可能没有正确地搜索它。有人可以建议修复或解决方法吗?我们正在使用RichFaces 3.3.1.GA,我们现在很难改变它。

1 个答案:

答案 0 :(得分:0)

好的,我终于明白了。在使用RichFaces 3.3.1的calendar.js中包含的JavaScript中存在一个错误。 parseDate()函数使用从日期模式和短月份列表(Jan | Feb | Mar ...)构建的正则表达式将输入字符串拆分为年,月和日。但是,它在不区分大小写的模式下运行RE。例如,月份可以作为“MAR”返回。然后调用getMonthByLabel()函数将月份转换为数字,但字符串比较确实区分大小写,因此我们无法解析不会导致parseDate()函数一般性失败的月份,一切都顺其自然。

看起来它已经被RichFaces 3.3.3.Final修复了。

3.3.1.GA:

Richfaces.Calendar.getMonthByLabel = function(monthLabel, monthNames) {
var i = 0;
while (i < monthNames.length)
    if (monthNames[i] == monthLabel)
        return i;
    else
        i++;
};

3.3.3.Final:

Richfaces.Calendar.getMonthByLabel = function (monthLabel, monthNames) {
var toLowerMonthLabel = monthLabel.toLowerCase();
var i = 0;
while (i < monthNames.length) {
    if (monthNames[i].toLowerCase() == toLowerMonthLabel) {
        return i;
    }

    i++;
}
};