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

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


Листинг 11.2. Фрагмент файла faces-config.xml

>

>

>··············xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"

>··············xsi: schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 

>··············http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"

>··············version="2.2">

>··

>····

>······fr

>····

>····

>······messages

>······msg

>····

>··


>··

>····*

>····

>······doCreateBook-success

>······/listBooks.htm

>····

>··

>

Создание компонентов-подложек

Как отмечалось ранее в этой главе, шаблон MVC поощряет разделение между моделью, представлением и контроллером: JSF-страницы являются представлением, а FacesServlet — контроллером. Компоненты-подложки — это шлюз к модели.

Компоненты-подложки — это аннотированные классы Java, они занимают центральное место в веб-приложениях. Они могут выполнять бизнес-логику (или делегировать ее выполнение компонентам EJB), обрабатывать навигацию между страницами и хранить данные. Типичное JSF-приложение включает в себя один или несколько компонентов-подложек, которые могут быть разделены между несколькими страницами. Эти данные хранятся в атрибутах компонентов-подложек, и действия, выполняемые на странице, вызывают метод компонента. Для связывания компонентов с компонентами-подложками следует использовать язык выражений (например, #{bookController.book.title}).


Примечание

Я предпочитаю использовать термин «компонент-подложка», а не «управляемый компонент», но исторически они имеют одинаковое значение в JSF. «Управляемый компонент» относится к более общей модели компонентов в Java EE, которую я представил в главе 2 вместе с CDI. В Java EE любой POJO (Plain Old Java Object — «простой Java-объект в старом стиле»), управляемый контейнером или провайдером, называется управляемым компонентом. Поэтому компонент-подложка на самом деле является управляемым компонентом, но для JSF.


Создать компонент-подложку так же просто, как сущность EJB или JPA: это всего лишь класс Java с CDI-аннотацией @Named (листинг 11.3) и областью действия CDI (в данном случае это @RequestScoped). Они не используют записи файла faces-config.xml, вспомогательные классы и не наследуют от других классов. JSF 2.2 также задействует механизм конфигурации с помощью исключения, поэтому, указав только две аннотации, вы можете использовать значения по умолчанию и развертывать веб-приложение, имеющее компонент-подложку.


Листинг 11.3. Простой компонент-подложка BookController

>@Named

>@RequestScoped

>public class BookController {

>··private Book book = new Book();

>··public String doCreateBook() {

>····createBook(book);

>····return "newBook.xhtml";

>··}

>··// Конструкторы и методы работы со свойствами

>}

В листинге 11.3 показана программная модель компонентов-подложек: он обладает состоянием (атрибут book) в течение конкретного периода времени (область действия), определяет методы действий (doCreateBook()) и обрабатывает навигацию (возвращает страницу newBook.xhtml).

С помощью языка выражений компонент может связать его значения со свойствами (например, ) или вызовом метода ().

Структура компонентов-подложек

Компоненты-подложки — это классы Java, которые управляются FacesServlet. Компоненты пользовательского интерфейса связаны со свойствами компонентов-подложек и могут вызывать методы действий. Компоненты-подложки должны следовать следующим требованиям.

• Класс должен иметь аннотацию @javax.inject.Named или XML-эквивалент в дескрипторе развертывания faces-config.xml.

• Класс должен иметь область действия (например, @RequestScoped).

• Класс должен быть определен как общедоступный, но не окончательный или абстрактный.

• Класс должен иметь общедоступный конструктор без аргументов, который будет использован контейнером для создания экземпляров этого класса.

• Класс не должен определять метод finalize().

• Атрибуты должны включать общедоступные методы работы со свойствами для того, чтобы быть связанными с компонентом.

Следуя модели легкого использования Java EE 7, компоненты-подложки могут быть просто аннотированными POJO, устраняя необходимость конфигурации. Как вы помните, в главе 2 я представил стереотипы CDI. @javax.enterprise.inject.Model — идеальный стереотип для использования в компонентах-подложках, поскольку он имеет аннотации @Named и @RequestScoped (как показано в листинге 11.4). Таким образом, вы можете переписать BookController, продемонстрированный в листинге 11.3, заменив аннотации на @Model (листинг 11.5), и получить такое же поведение.


Листинг 11.4. Встроенный в CDI стереотип @Model

>@Named

>@RequestScoped

>@Documented

>@Stereotype

>@Target({ TYPE, METHOD, FIELD })

>@Retention(RUNTIME)


Рекомендуем почитать
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 так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.