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

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

JSF 2.2 упрощает и насыщает работу с динамическими пользовательскими интерфейсами. Он имеет встроенную поддержку вызовов AJAX. Спецификация поставляется с библиотекой JavaScript, что позволяет осуществлять асинхронные вызовы сервера и обновлять небольшую часть страницы.

Создание пользовательских интерфейсов, управление навигацией по всему приложению и синхронный либо асинхронный вызов бизнес-логики стали возможны потому, что JSF построен по шаблону «модель — представление — контроллер» (Model — View — Controller, MVC). Каждая часть существует отдельно от других, что позволяет изменять пользовательский интерфейс без ущерба для бизнес-логики и наоборот. В этой главе представлены все эти понятия, и она дополняет главу 10.

Шаблон MVC

JSF, как и большинство веб-платформ поощряет разделение обязанностей с использованием вариаций шаблона проектирования MVC. MVC — это архитектурный шаблон, предназначенный для изоляции бизнес-логики от пользовательского интерфейса. Бизнес-логика не должна перемешиваться с кодом пользовательского интерфейса. Если они смешаются, приложения станет намного труднее поддерживать и расширять. Применение MVC приводит к созданию слабосвязанного приложения; в приложениях такого типа проще изменить визуальный внешний вид приложения или основные правила бизнес-логики, не затрагивая другие компоненты.

Модель в MVC представляет собой данные приложения, отображение соответствует пользовательскому интерфейсу, а контроллер управляет связью между ними (рис. 11.1).


Рис. 11.1. Шаблон проектирования MVC


Модель представлена содержимым, которое часто хранится в базе данных и отображается в представлении. Модель строится, не заботясь о внешнем виде, в котором она предстанет пользователю. В JSF она может состоять из компонентов-подложек, вызовов EJB, сущностей JPA и т. д.

Представление в JSF — это фактически страница XHTML, когда мы имеем дело с веб-интерфейсами. Как объяснялось в главе 10, представление обеспечивает графическое отображение модели. Модель может также иметь несколько представлений, показывая книгу, например, в виде формы или списка.

Когда пользователь манипулирует представлением, тот информирует контроллер о желаемых изменениях. Затем контроллер собирает данные, преобразует и проверяет их, вызывает бизнес-логику и генерирует содержимое XHTML. В JSF контроллером является FacesServlet.

FacesServlet

FacesServlet — это реализация типа javax.servlet.Servlet. Она действует как центральный элемент контроллера, через который проходят все запросы пользователей. Как показано на рис. 11.2, при возникновении события (например, когда пользователь нажимает кнопку) уведомление о нем отправляется через HTTP на сервер и перехватывается объектом типа javax.faces.webapp.FacesServlet. Он изучает запрос и вызывает различные действия для модели с использованием компонентов-подложек.

FacesServlet принимает входящие запросы и передает управление объекту типа javax.faces.lifecycle.Lifecycle. Используя фабрику, он создает объект типа javax.faces.context.FacesContext, который содержит и обрабатывает всю информацию о состоянии для каждого запроса. Объект типа Lifecycle использует объект типа FacesContext в течение шести различных фаз жизненного цикла страницы (описан в главе 10) до отрисовки ответа.


Рис. 11.2. Взаимодействия FacesServlet


Запросы пользователей обрабатываются средой выполнения JSF, которая объявляет объект типа FacesServlet, используя общее поведение, благодаря конфигурации с помощью исключения. Если параметры по умолчанию вас чем-то не устраивают, вы можете настроить FacesServlet в файле web.xml. Пример этого файла приведен в листинге 11.1.


Листинг 11.1. Определение FacesServlet в файле web.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-app_3_1.xsd"

>·········version="3.1">


>··

>····Faces Servlet

>····javax.faces.webapp.FacesServlet

>····1

>··

>··

>····Faces Servlet

>····*.jsf

>··


>··

>····javax.faces.PROJECT_STAGE

>····Development

>··

>··

>····javax.faces.FACELETS_SKIP_COMMENTS

>····true

>··

>

В этом файле определяется объект типа javax.faces.webapp.FacesServlet: задаются его имя (Faces Servlet) и способ отображения. В данном примере все запросы, которые имеют расширение. jsf, управляются сервлетом, а любые запросы вида http://localhost:8080/chapter11-1.0/newBook.jsf будут обрабатываться JSF.


Примечание

Стандартное отображение сервлетов для JSF-страниц — *.faces или /faces/*. В листинге 11.1 это значение по умолчанию было изменено на. jsf, но, если. faces вам подходит, можно опустить конфигурацию отображения сервлета.


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