воскресенье, 2 августа 2009 г.

Richfaces / Trinidad совсемстно с Facelets

Проапргрейдил существующий проект с Java 1.4 до Java 1.5, JSF 1.1 до JSF 1.2, реализацию JSF с Myfaces на Sun RI... и решил использовать в проекте какой-нибудь фреймворк предоставляющий AJAX для JSF. Первым попробовал Richfaces. Но оно как-то нестабильно заработало - то работает, то нет. Потратил два дня пытаясь понять почему, но безрезультатно. Затем попробовал Trinidad.. и с тем же успехом. Фреймворк работал нестабильно. Например, я открывал JSF страницу, и если кликал на AJAX'овую кнопку сразу после загрузки страницы, то все было нормально, запрос шел и обрабатывался, а если спустя пару секунд кликал, то запрос не обрабатывался и нужная часть страницы не обновлялась. Через какое-то время обратил внимание на странное и уже привычное сообщение в логах "INFO: Facelet[/page/blah.xhtml] was modified @ 14:23:24 AM, flushing component applied...". Оказалось, что это и есть причина проблемы. Время в виртуальной машине было на три часа меньше времени на компе на котором я собирал WAR файлы. Соответственно время создания файлов выглядила для websphere'ы на три часа из будущего. И похоже, что странный алгоритм Facelets обнаружения изменений в файлах начал сбоить по этой причине и перечитывать файл сбрасывая при этом дерево компонент! Решил проблему, установив facelets.REFRESH_PERIOD контекстный параметр в web.xml. Теперь оба фреймворка работают нормально. Осталось только определится какой я хочу..