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

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

Компоненты-подложки и навигация

Все рассмотренные концепции были связаны с одной страницей: что такое страница, что такое компонент, как они отрисовываются, преобразуются и проверяются? Веб-приложения состоят из нескольких страниц и выполняют бизнес-логику (например, путем вызова слоя EJB или RESTful-веб-служб). Обработка компонентов-подложек переходит от одной страницы к другой, вызывая EJB и синхронизируя данные с компонентами.

Компонент-подложка — это специализированный класс Java, который синхронизирует значения с компонентами, обрабатывает бизнес-логику и навигацию между страницами (подробнее о компонентах-подложках и навигации читайте в главе 11). Вы связываете компонент с определенным свойством компонентов-подложек или действия с помощью EL. Следующий код связывает атрибут isbn компонента book и вызывает действие компонента-подложки doCreateBook:

>

>

Первая строка кода получает введенное текстовое значение непосредственно в свойство book.isbn компонента-подложки, которое называется BookController. Введенное текстовое значение синхронизировано со свойством book.isbn компонента-подложки. Компонент-подложка также обрабатывает события. Вторая строка кода показывает кнопку отправки, связанную с действием. Когда пользователь нажимает кнопку Submit (Отправить), срабатывает событие компонента-подложки, где выполняется слушатель событий (в этом примере — метод doCreateBook()).

В листинге 10.6 показан компонент-подложка BookController. Этот класс Java имеет CDI-аннотацию @Named, поэтому может быть использован в EL. У него есть свойство book, которое связано со значением компонента страницы (value="#{bookController.book.isbn}"). Метод doCreateBook() вызывает EJB, не сохраняющий состояние, а затем возвращает строку, которая позволяет перемещаться между страницами (listBooks.xhtml):


Листинг 10.6. Компонент-подложка BookController

>@Named

>@RequestScoped

>public class BookController {

>··@Inject

>··private BookEJB bookEJB;

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

>··public String doCreateBook() {

>····book = bookEJB.createBook(book);

>····return "listBooks.xhtml";

>··}

>··// Методы работы со свойствами

>}

Язык выражений

Связывание между страницей JSF и компонентом-подложкой Java выполняется через EL. Вы можете использовать утверждения EL для вывода значений переменных, атрибутов доступа объектов на странице или для вызова метода компонента-подложки. Базовый синтаксис утверждения EL выглядит так:

>#{expr}

Утверждения #{expr} будут преобразовываться и оцениваться во время выполнения JSF. Выражения EL могут использовать большинство обычных операторов Java:

• арифметические: +, —, *, / (деление), % (целая часть);

• операторы отношений: == (равно),!= (не равно), < (меньше), > (больше), <= (меньше либо равно), >= (больше либо равно);

• логические: && (и), || (или),! (не);

• другие: (), empty, [].

Следует отметить, что некоторые операторы имеют как символьные, так и текстовые варианты (> может стать gt; / может стать div и т. д.). Эти эквиваленты позволят вам разрабатывать свои страницы JSF с XML-совместимым синтаксисом. Оператор < можно кодировать как #{2 lt 3}, а также #{2 < 3}.

Оператор empty проверяет, является ли объект пустым или же он ссылается на пустую строку, список, словарь или массив. Он возвращает значение true, если это верно, иначе возвращает false. Вы можете проверить, равен ли объект или один из его атрибутов значению null.

>#{empty book}

>#{empty book.isbn}

Оператор «точка» (.) используется для доступа к атрибуту isbn объекта book. Другой вариант синтаксиса — оператор []. Доступ к атрибуту isbn может быть получен с помощью любой нотации:

>#{book.isbn}

>#{book[isbn]}

В версии EL 3.0 эта особенность была улучшена — появилась возможность вызывать методы. Следующий фрагмент кода показывает, как купить книгу, вызвав метод book.buy(), а также передачу параметра (используемая валюта):

># {book.buy()}

># {book.buy(‘EURO’)}

Поддержка AJAX

Веб-приложение должно предоставлять богатый и отзывчивый интерфейс. Подобная реактивность может быть достигнута путем обновления только небольших фрагментов страницы в асинхронном режиме, что и позволяет делать AJAX. Предыдущие версии (1.x) JSF не предлагали собственного готового решения, пробел восполняли сторонние библиотеки, такие как a4jsf. Начиная с версии JSF 2.0, поддержка AJAX была добавлена в виде библиотеки JavaScript (jsf.js), определенной в спецификации и теге . Например, вы можете использовать тег для отправки формы в асинхронном режиме, что показано в следующем фрагменте кода:

>

>··

>

Не волнуйтесь, если вы не понимаете этот код: целый раздел главы 11 посвящен AJAX.

Обзор спецификации JSF

Веб-разработка с помощью языка Java началась в 1996 году с появлением Servlet API, который представлял собой неразвитый способ создания динамических веб-страниц. Вы должны были манипулировать низкоуровневым HTTP API (HttpServletRequest, HttpServletResponse, HttpSession и т. д.), чтобы отобразить HTML-теги внутри вашего кода на Java. JSP появился в 1999 году и предоставил более высокий уровень абстракции, нежели сервлеты. В 2004 году вышла первая версия JSF. Начиная с версии 1.2, в 2006 году, JSF стал частью Java EE 5. JSF 2.2 входит в состав Java EE 7.


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