четверг, 17 июля 2014 г.

Confirmation dialog в RichFaces 4

Не так давно я решил лично узнать, за что все кому не лень ругают JSF. Касаемо web-разработки, на тот момент у меня был лишь некоторый опыт работы с фреймворком ZK (его создатели, кстати тоже хают JSF и некоторых другие фреймворки, но в данном случае делают они это скорее в маркетинговых целях).

Собравшись изучать JSF (разумеется версию 2.x), я выбрал достаточно суровую, на мой взгляд, библиотеку компонентов - RichFaces (последней стабильной версией на тот момент была 4.3.4.Final, в исходниках же к статье используется версия 4.3.7.Final - принципиальных различий нет) - и через недолгое время знакомства с ней столкнулся с элементарной, казалось бы, проблемой: по щелчку на кнопке/ссылке показать пользователю модальный диалог с каким-нибудь вопросом "Do you really want to do something?", а также парой кнопок OK и Cancel. В принципе, для такого простого случая взаимодействия с пользователем можно было бы обойтись и JavaScript-функцией confirm, но что если заказчику или вам самим захочется чего-то особенного. К примеру, чтобы окно диалога было выполнено в определённом стиле. В общем, стандартного компонента в RichFaces для этой цели нет, а в интернетах предлагается решение на основе JavaScript, отображающего скрытый модальный диалог. Но мне больше понравился подход PrimeFaces. В этой библиотеке есть готовый компонент confirmDialog. Взгляните на демку, чтобы ознакомиться с его работой. Принцип действия схож с решениями для RichFaces, однако выглядит всё более целостно и возможно такой подход поможет немного снизить степень гремучести смеси "html/el/javascript и еще черт знает чего" ©, из которой состоят представления в JSF. Ниже приведено краткое руководство по созданию в RichFaces аналога компонента confirmDialog (тут исходники).