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

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


Листинг 11.18. Шаблон Layout.xhtml, используемый обеими страницами

>

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

>

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

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

>

>··<ui: insert name="title">Название по умолчанию</ui: insert>

>

>

>··


>··

Заголовок по умолчанию

>··



>··

>··························errorStyle="color: red"/>


>··Содержимое по умолчанию


>··


>··

>

>

Написание страницы newBook.xhtml

newBook.xhtml — отдельная страница, которая имеет форму в верхней части, предназначенную для ввода данных о книге (названия, цены, описания, количества страниц и иллюстраций), а также списка книг в нижней части (см. рис. 11.8). Каждый раз, когда нажатием кнопки создается новая книга, список обновляется, показывая созданную книгу. После отправки формы в обновлении нуждается только часть страницы, содержащая список. Для этого используется AJAX.

Код в листинге 11.19 показывает верхнюю часть страницы, которая представляет собой форму. Переменная BookController относится к компоненту-подложке BookController, который ответственнен за всю бизнес-логику (см. листинг 11.17). Book — это сущность, и ее доступ к ее атрибутам выполняется с помощью языка выражений (#{bookController.book.title} связан с названием).


Листинг 11.19. Верхняя часть страницы newBook.xhtml

>

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

>

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

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

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

>

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

>··

>····

>······

>········

>········


>········

>········


>········

>········


>········

>········


>········

>········

>······


>······

>········

>······

>····

>····…

Тег описывает кнопку, из которой делается вызов AJAX. Когда пользователь нажимает ее, тег передает все параметры формы с помощью @form (вместо этого он мог бы передать список всех идентификаторов компонентов). Значения всех компонентов пользовательского интерфейса, которые находятся в форме, затем передаются на сервер.

Метод doCreateBook() компонента-подложки вызывается в тот момент, когда сохраняется новая книга, а также когда возвращается список книг. Если исключение не сгенерировалось, будет возвращено название страницы, к которой нужно перейти: newBook.xhtml. В этом случае пользователь остается на той же странице. Отрисовка этого списка на стороне клиента производится асинхронно благодаря AJAX. Элемент render ссылается на ID booklist как на идентификатор таблицы данных, отображающей все книги (листинг 11.20), а также на ID errors, который определен на странице layout.xhtml (см. листинг 11.18), если сообщение должно быть отображено.


Листинг 11.20. Нижняя часть страницы newBook.xhtml

>····…

>····


>····

Список книг


>····

>···········

>········

>··········

>········

>········

>······


>······

>········

>··········

>········

>········

>······

>····

>··

>

>

В листинге 11.20 показана нижняя часть страницы. Для отображения списка книг используется тег , чье значение извлекается прямо из BookEJB (вместо BookController) благодаря аннотации @Named (см. листинг 11.16). Тег связывается с методом bookEJB.findAllBooks(), который возвращает объект типа List и объявляет переменную bk для перебора списка. Затем внутри тега вы можете указывать такие выражения, как #{bk.price}, чтобы получить атрибут книги price и отобразить его. Тег создает HTML-ссылку, при выборе которой происходит переход к странице viewBook.xhtml и передается идентификатор книги (viewBook.xhtml?ID=#{bk.id}).


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