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

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

Есть один случай, когда использование XML-конфигурации очень полезно. Когда существуют глобальные ссылки на некоторые страницы (например, авторизация или выход могут быть выполнены во всем приложении), вам не захочется объявлять их на каждой странице. Глобальные правила навигации могут быть указаны в XML (эта же особенность невозможна внутри компонентов-подложек).

>

>··*

>··

>····logout

>····logout.xhtml

>··

>

Если у вас есть действие, которое выполняется на каждой странице приложения, вы можете использовать элемент navigation-rule без элемента или же обратиться к шаблону поиска (*). В предыдущем коде указывается, что для любой страницы, на которой находится пользователь, в том случае, если метод компонента-подложки возвращает логическое имя logout, следует перенаправить пользователя на страницу logout.xhtml.

Предыдущие примеры показали простой вариант навигации, когда каждая страница имеет только одно правило навигации и только одну страницу, на которую следует перейти. Это не самый распространенный случай, и, в зависимости от определенных правил и исключений, пользователи могут быть перенаправлены на разные страницы. Этого можно достичь как с помощью компонентов-подложек, так и с помощью файла faces-config.xml. В следующем коде показан оператор switch, который перенаправляет пользователя на разные страницы. Обратите внимание, что если возвращено значение null, пользователь возвращается обратно на текущую страницу:

>public String doCreateBook() {

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

>··bookList = bookEJB.findBooks();

>··switch (value) {

>····case 1: return "page1.xhtml"; break;

>····case 2: return "page2.xhtml"; break;

>····default: return null; break;

>··}

>}

В версии JSF 2.0 внесено улучшение, касающееся условных переходов по страницам. Оно позволяет указывать предварительное условие, которое должно быть удовлетворено для перехода на другую страницу. Это предварительное условие определяется как выражение с новым конфигурационным элементом . В следующем примере, если пользователь имеет роль admin, процедура выхода из учетной записи отличается и переадресовывает его на страницу logout_admin.xhtml:

>

>··*

>····

>······logout

>······logout_admin.xhtml

>······#{userController.isAdmin}

>····

>

Добавление страниц в закладки

До выхода версии JSF 2.0 каждое взаимодействие клиента и сервера происходило на основе HTTP POST ( и ). Хотя это было удобно для большинства ситуаций, возникали проблемы при добавлении страницы веб-приложения в закладки. В JSF 2.0 была представлена возможность добавлять страницу в закладки с использованием двух новых тегов — , , а также тега ViewParam. Это позволило осуществлять поддержку HTTP-запросов GET. Но модель все еще не была готова, поэтому приходилось использовать для этого фазу preRenderView. В JSF 2.2 был представлен ViewAction, позволяющий упростить процедуру добавления в закладки.

ViewParam и ViewAction предоставляют механизм обработки GET-запросов и связывания параметров, переданных с HTTP-запросом, со свойствами модели, используя EL. Страница с тегом может получать параметры из GET-запроса непосредственно в связанные свойства. Следующий код дает возможность получить доступ к странице viewBook.xhtml с помощью параметра id в запросе (например, viewBook.xhtml?id=123) и связать его с атрибутом bookController.book.id:

>

>··< f: viewParam name="id" value="#{bookController.book.id}"/>

>

Как только извлекается параметр id из запроса HTTP и связывается со свойством, вам следует вызвать действие компонента-подложки. В JSF 2.2 определен новый тег , который определяет действие, характерное для приложения. Для того чтобы получить книгу из базы данных, основываясь на параметре id, вам следует вызвать метод doFindBookById таким образом:

>

>··

>··

>

Этот прием позволяет вам непосредственно менять URL в браузере, чтобы указать на желаемую книгу (например, viewBook.xhtml?id=123 или viewBook.xhtml?id=456) и добавить страницу в закладки.

Преобразование и проверка

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


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