Нечетное богатство: ошибка календаря - PullRequest
0 голосов
/ 01 марта 2011

Я использую богатый календарь с включенными ручными подсказками и строку даты "dd MMM yyyy". Что-то вроде:

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

Наш отдел контроля качества обнаружил странную маленькую причуду. Если вы введете дату с месяцем во всех заглавных буквах, например «15 марта 2011 года», а затем откроете элемент управления календаря, календарь отключится. Он отображает «undefined» для месяца и «NaN» для года, а дни месяца заполнены от 1 до 42.

enter image description here

Я нигде не обнаружил этой ошибки, но, возможно, я не ищу ее правильно. Кто-нибудь может предложить исправить или обойти? Мы используем RichFaces 3.3.1.GA, и нам было бы трудно изменить это в данный момент.

1 Ответ

0 голосов
/ 24 марта 2011

ОК, я наконец понял это.В JavaScript, включенном в calendar.js с RichFaces 3.3.1, есть ошибка.Функция 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++;
}
};
...