Изучаем Java EE 7 - [164]

Шрифт
Интервал

Новый подход предполагает создание страницы XHTML, которая содержит компоненты, а затем использование ее в качестве компонента на других страницах. Эта страница XHTML затем рассматривается как реальный компонент, который может поддерживать работу с валидаторами, преобразователями и слушателями. Внутри составного компонента разрешено использовать любую допустимую разметку, в том числе шаблоны. Составные компоненты обрабатываются как ресурсы и, следовательно, должны находиться в пределах стандартных каталогов resources. В табл. 10.19 перечислены все теги, участвующие в создании и определении составного компонента.


Таблица 10.19. Теги, используемые для объявления и определения составных компонентов
ТегОписание
Описывает контракт компонента
Определяет реализацию компонента
Определяет атрибут, который может быть задан экземпляру компонента. Их может не быть вообще либо быть сразу несколько внутри раздела
Указывает, что этот компонент поддерживает фасет
Используется в разделе . Вставленный фасет будет отрисован в компоненте
Применяется в разделе . Любые компоненты-потомки или шаблоны внутри компонента будут вставлены в отрисовываемый результат
Указывает, что компонент, чей контракт определен в разделе , в который этот компонент вложен, предоставляет реализацию типа ValueHolder
Используется в разделе для отрисовки фасета
Применяется в разделе для того, чтобы включить XML-содержимое, не определенное в спецификации JSF
Указывает, что компонент, чей контракт определен в разделе , в который этот компонент вложен, предоставляет реализацию типа EditableValueHolder
Определяет контракт для поведений, которые могут изменить отрисованное содержимое компонента
Указывает, что компонент, чей контракт определен в разделе , в который этот компонент вложен, предоставляет реализацию типа ActionSource

Рассмотрим пример, который показывает, как легко можно создать графический компонент и использовать его на других страницах. Вы, возможно, помните из предыдущих глав, что приложение CD-BookStore продает два разных типа товара: книги и компакт-диски. В главе 4 я представлял их как три различных объекта: Book и CD, наследующие от класса Item. Класс Item содержит общие атрибуты (название, цену и описание), а затем для классов Book и CD указываются специализированные свойства (isbn, publisher, nbOfPage и illustrations для Book; musicCompany, numberOfCDs, totalDuration и genre для CD). Если вы хотите, чтобы ваше веб-приложение имело возможность создавать новые книги и компакт-диски, понадобятся две разные формы. Но общие атрибуты класса Item могут располагаться на отдельной странице, которая будет выступать в качестве компонента. На рис. 10.8 показаны эти две страницы.


Рис. 10.8. Две формы, одна из которых предназначена для создания компакт-диска, а вторая — для создания книги


Создадим составной компонент с двумя полями для ввода текста (название и цена) и одной текстовой областью (для описания). Подход к написанию компонентов JSF 2.2 относительно близок к такому подходу в Java. Вы должны сначала написать интерфейс — (листинг 10.14), который выступает в качестве отправной точки для компонента. В нем описываются имена и параметры, используемые компонентом (в данном случае это компонент item и CSS-свойство style). Затем идет реализация — . Это тело, графическое представление компонента, написанное на XHTML, и любые теги JSF, которые вы видели ранее. Интерфейс и реализация находятся на одной и той же XHTML-странице.


Листинг 10.14. Составной компонент newItem.xhtml

>

>······xmlns: h="http://xmlns.jcp.org/jsf/html"

>······xmlns: composite="http://xmlns.jcp.org/jsf/composite">


>

>··

>··

>


>

>··

>····

>····


>····

>····


>····

>····


>··

>

>

Компонент в листинге 10.14 объявляет интерфейс с двумя атрибутами: item, представляющий компонент Item (и подклассы Book и CD), и style, который является стилем CSS, используемым для отрисовки. Эти атрибуты затем используются для реализации составного компонента с помощью следующего синтаксиса:


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.