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

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

Код, приведенный в листинге 10.5, является XHTML-страницей Facelets, которая использует теги JSF (xmlns: h="http://xmlns.jcp.org/jsf/html") для отображения формы с двумя полями ввода (ISBN и название книги) и кнопки. Эта страница состоит из нескольких JSF-компонентов. Некоторые из них не имеют внешнего вида, как и те, что используются для объявления заголовка (), тела () или формы (). Другие компоненты можно увидеть, они представляют собой метку (), текстовое поле () или кнопки (). Обратите внимание, что чистые HTML-теги также могут быть использованы на странице (

, ,
и т. д.).


Листинг 10.5. Фрагмент страницы JSF, использующей сочетание компонентов JSF и HTML

>

>·········"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

>

>

>··Создать новую книгу

>

>

>··

Создать новую книгу

>··


>··

>····

>······

>········

>········

>······

>······

>········

>········

>······

>····

>····

>··············action="#{bookController.doCreateBook}" styleClass="submit"/>

>··

>··


>··APress — Изучаем Java EE 7

>

>

Facelets

Одной из причин создания JSF было намерение повторно использовать JSP (JavaServer Page) в качестве основного PDL, поскольку он уже был частью Java EE. JSP использовал JSTL и EL (JSP Standard Tag Library — стандартная библиотека тегов JSP), так что идея заключалась в том, чтобы задействовать все эти технологии в рамках JSF. JSP — это язык страниц, а JSF — это слой компонентов, располагающийся над ним. Тем не менее жизненные циклы JSP и JSF не совсем подходят друг другу. Теги в JSP обрабатываются один раз сверху вниз, чтобы сформировать ответ. JSF имеет более сложный жизненный цикл, в котором генерация дерева компонентов и отрисовка происходят в разных фазах. Именно здесь приходит на помощь Facelets, чтобы соответствовать жизненному циклу JSF.

Facelets начал свое существование как альтернатива JSP с открытым исходным кодом. В отличие от JSP, EL и JSTL он не имел JSR и не был частью Java EE. Facelets стал заменой JSP и предоставил альтернативу на основе XML (XHTML) для всех страниц JSF-приложений. Facelets был разработан на основе JSF, именно поэтому он представляет собой простую модель программирования. Из-за этого Facelets был указан в JSF 2.0 и сегодня предоставляется в Java EE 7 в качестве предпочтительного PDL для JSF.

Отрисовщики

JSF поддерживает две модели программирования для отображения компонента: непосредственную и делегированную реализации. При использовании прямой модели компоненты должны декодировать и закодировать себя в графическое представление. При использовании модели делегирования эти операции делегируются отрисовщику, который позволяет компоненту не зависеть от технологии отрисовки (браузер, переносное устройство и т. д.) и иметь несколько графических представлений.

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

Отрисовщики располагаются в наборах отрисовки, которые сосредотачиваются на конкретном типе вывода. Для обеспечения переносимости приложения JSF включает поддержку стандартного комплекта отрисовщиков и связанных с ним отрисовщиков для HTML 4.01. Реализации JSF могут сформировать собственный комплект отрисовщиков для создания языка разметки для беспроводных устройств (WML), масштабируемой векторной графики (SVG) и т. д.

Преобразователи и валидаторы

Как только страница отрисована, пользователь может взаимодействовать с ней для ввода данных. Поскольку не существует никаких ограничений типов, отрисовщик не может знать заранее, как отобразить объект. Здесь в игру вступают преобразователи: они преобразуют объект (он может иметь тип Integer, Date, Boolean и т. д.) в строку для отображения и из входной строки обратно в объект. JSF поставляется с набором преобразователей для общих типов (в пакете javax.faces.convert), но вы можете разработать свой собственный или включить сторонние преобразователи.

Иногда эти данные также должны быть подтверждены перед обработкой на сервере. Валидаторы отвечают за то, чтобы значение, введенное пользователем, было корректным. С одним компонентом могут быть связаны один или несколько валидаторов. Вместе с JSF поставляется несколько валидаторов (LengthValidator, RegexValidator и т. д.). Он также позволяет вам создать свой собственный валидатор с помощью аннотированных классов. Когда при преобразовании или проверке корректности появляется ошибка, сообщение для отображения отправляется ответу. С JSF 2.0 проверка может быть делегирована Bean Validation (это показано в главе 3).


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