понеділок, 31 березня 2008 р.

Liferay + JSF + ICEfaces

копия моей статьи на Liveinternet.ru от 2 октября 2007
интеграцию портала Liferay и JavaServer Faces компонентов ICEfaces можно считать условно завершенной. безусловно, это только начало интеграции и впереди еще долгий путь полный устранения дефектов, реализации улучшений и всего прочего, чем богата наша програмисткая работа. но первый шаг сделан, анонсированная в начале лета интеграция AJAX JSF framework с Liferay порталом состоялась. сегодня я протестировал портлет, использующий ICEfaces components весрии 1.7-DR1 в контейнере Liferay Portal версии 4.3.2. успешно работает отрисовка, навигация и взаимодействие компонентов. уверен, что валидация также работает.
Liferay 4.3.0 & ICEfaces 1.6.0
именно начиная с этих версий была анонсирована интеграция и появился первый пример. при попытке запуска стандартноего (взятого с сайта Liferay) примера, начались проблемы:
  1. ошибки JavaScript, вызванные отсутсвием инициализированного объекта window.logger.
  2. Workaround: поместить на страницы портлета код, инициализирующий данный объект, в случае если объект отсуствует:
    <script type="text/javascript"> if (window.logger == null) { window.logger = new ICE.Log.Logger(['window']); } </script>
  3. после решения проблемы с логгером, асинхронные обращения к серверу, посылаемые ICEface, завершаются ошибкой JavaScript.
  4. Solution: на странице портала должен быть... только один портлет с компонентами ICEfaces. тогда все работает нормально. если поместить туда другие портлеты, возникают ошибки. на форуме ICEfaces я обнаружил, что это проблемы интеграции, связанные непосредственно с Liferay Portal. и действительно, проблема была решена в версии 4.3.1
Liferay Portal 4.3.1 & ICEfaces 1.6.0
после решения проблемы взаимодействия портлетов, содержащих ICEfaces компоненты, и других портлетов в Liferay Portal, разработке ICEfaces портлетов мешала только одна проблема: ошибка, при обработке правил навигации внутри ICEfaces портлета. причной обшибки являлось предопределенное обновление контейнера <body id="body"> после выполнения правила навигации JSF. такое поведение недопустимо внутри порталов, поскольку портлет является лишь частью HTML страницы. решением проблемы могла стать замена стандартного ICEfaces ViewHandler, на разработанный специально для исправления этой ошибки.
ссылки
статья на английском
форум компонентов ICEfaces
матрица JSF компонентов