2011-03-01 66 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