2011-03-01 59 views
0

我使用了启用手动建议的丰富日历控件,日期字符串为“dd MMM yyyy”。喜欢的东西:奇数富贵:日历bug

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

我们的QA部门发现了一个奇怪的小怪癖。如果您在所有大写字母中输入月份的日期,例如“2011年3月15日”,然后弹出日历控件,则日历将跳出。它显示了一个月,“南”年度“不确定”,而该月的天数从1填充42

enter image description here

我还没有发现这个错误在任何地方的报道,但有可能我没有正确地寻找它。任何人都可以提出解决方法或解决方法?我们正在使用RichFaces 3.3.1.GA,现在我们很难改变它。

+0

如果你输入'3月15日2011',该错误不会出现? – romaintaz 2011-03-02 20:57:22

+0

不,mar,仍然会导致bug,除了3月份以外的任何混合情况(例如,mar,mar,mAR),所有月份都是如此,而不仅仅是3月份。但是,拼写错误的月份,或者将任何其他垃圾放入字符串只会导致字符串被清除,日历会在今天的月份弹出。这是一个奇怪的。 – 2011-03-02 23:05:43

回答

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++; 
} 
}; 
+0

嗨,格雷格,我尝试使用日期模式“MMM”“yy”与丰富:丰富:日历,但它不起作用。我的richfaces版本是3.3.3.Final。任何想法?谢谢。 – 2011-06-07 03:52:38