| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > JSF 2.0 UI Component |
| Автор: AndrewMormysh 25.8.2009, 01:28 |
| Поделитесь пожалуйста опытом создания кастомных компонентов на JSF 2.0. Как известно jsf 2.0 rc вышел неделю назад - брожу по бескрайним просторам, но никак не могу найти хорошей статьи или какой-то документации по этому поводу. Есть буквально несколько бедных статеек без ссылок на источники: http://weblogs.java.net/blog/driscoll/archive/2008/11/jsf_20_writing_1.html, http://tapestryjava.blogspot.com/2008/11/simple-jsf-20-component-vs-tapestry.html. Да и то материал годичной давности (не понимаю правда как такое могло получиться) (( В общем, есть ли кто нибудь с опытом в этой области? |
| Автор: powerOn 25.8.2009, 07:24 |
Опыт есть небольшой |
| Автор: AndrewMormysh 25.8.2009, 11:36 |
Желаем На код не скупись, и компонент и пример использования.. и дескрипторы все )) ну в общем чем больше информации тем лучше, а то как-то ее совсем мало везде ( За линк спасибо, буду читать. Это единственное на данный момент место где можно черпать знания по этой теме? |
| Автор: powerOn 25.8.2009, 22:26 | ||||||||||||||||||
В общем накатал небольшой пример компонента для простого отчета в виде таблицы. Мавен-проект со всеми исходниками прикреплен, его можно скачать и собрать из консоли или IDE командой:
Сейчас я опишу основные шаги по конфигурации JSF 2.0 проекта, но рассчитываю на то Вы уже знакомы с JSF как таковым, например писали что нибудь на JSF 1.2 и Facelet-ах, и, конечно же, понимаете что такое Maven и как с ним работать. Ну, поехали: 1) Создайте мавен проект с типом упаковки war. В pom файл необходимо добавить следующие зависимости:
Тут у нас последние снапшоты JSF 2.0 библиотек, а так же JSTL, которая им необходима. Наити эти зависимости можно в следующем репозитории:
2) Сконфигурируйте web.xml. Так же как и для JSF 1.2 для второй версии понадобится объявить Faces Servlet и ряд не совсем обязательных, но иногда полезных свойств:
3) Наш будущий компонент будет описан исключительно разметкой. Он будет отображать табличку с данными (что-то вроде отчета). Использоваться на странице он будет как обыкновенный тег, который связан через атрибут с данными для отчета. Для создания такого компонента нужно в папке webapp создать каталог с именем resources- JSF2 знает о нем, по умолчанию он будет искать компоненты там. Внутри каталога создать еще одну папку, например mycomponents - это имя произвольное, но его нужно запомнить, т.к. оно понадобится при подключении нашего тега к странице. Внутри папки mycomponents создадим файл с описанием тега, пусть это будет simpleReportTable.xhtml. Вот его содержание:
Как видно, это такой же XHTML файл который можно часто увидеть при работе с Facelet-ами, но имеется небольшая особенность: теги composite:interface, где делается объявление имени и атрибутов нашего компонента; и composite:implementation который содержит разметку - реализация компонента. Тег composite:interface в нашем случае содержит атрибуты name="simpleReportTable" и displayName="Simple Report Component". Это имя компонента и его описание. Внутри имеется тег <composite:attribute name="model" required="true" />, он объявляет что у компонента будет атрибут model, которая будет использоваться для доступа к данным необходимым для отчета. Внутри тега composite:implementation находится разметка для генерации таблицы. Доступ к атрибуту model осуществляется через конструкцию #{cc.attrs.model}, ну а свойствам модели аналогично через точку. Чтобы использовать такой компонент на странице нашего проекта необходимо его подключить как библиотеку тегов, объявив префикс тегов. На странице index.xhtml это выглядит следующим образом (5 строка):
В пятой строке (xmlns:mc="http://java.sun.com/jsf/composite/mycomponents") мы объявляем префикс mc (можно было назвать его как угодно), url же выглядит следующим образом: стандартная приставка http://java.sun.com/jsf/composite/ + Имя папки с компонентом (mycomponents). Сам компонент имеет имя simpleReportTable, как имя файла с его реализацией. Как видно из строки 7 он имеет атрибут связанный со свойством reportData бина ReportBean. 4) Код JSF бина и классов для отчета.
Что интересно, в JSF 2.0 теперь можно объявлять бины с помощью аннотаций, что лично для меня является серьезным облегчением в работе. Вспомогательные классы необходимые для отчета:
В целом остается только собрать проект, запустить на вашем любимом сервере и открыть страницу index.xhtml. Результат должен быть примерно таким: ![]() Вот собственно и все, простой компонет готов. |
| Автор: AndrewMormysh 26.8.2009, 02:02 |
| powerOn, всё работает, это как раз то что надо, огромное спасибо. Разбираться буду позже - тогда и вопросы задам ) P.S. а в какой среде ты программируешь? У меня IDEA 8.1 - она JSF 2.0 не признаёт. (пока писал пост - увидел в твоей подписи ссылку на NetBeans - в ней? Там всё ОКс jsf2.0?) |
| Автор: powerOn 26.8.2009, 07:37 |
| NetBeans 6.8 M1 с горем пополам поддерживает JSF 2.0. По крайней мере подсказки для тегов есть. Думаю к релизу дела пойдут получше. |