410013796724260
• Webmoney
R335386147728
Z369087728698
Навигация и перенаправлениеJSF включает в себя механизм навигации, аналогичный Struts. За переход на определенную страницу отвечает обработчик навигации (navigation handler). Фреймворк JSF в сочетании с Facelets позволяет использовать как статическую навигацию, так и динамическую навигацию. Для простых (безусловных) переходов используется статическая навигация. Это означает, что при нажатии на кнопку или ссылку всегда приводит к отображению конкретной, заранее заданной, JSF страницы. В качестве примера можно рассмотреть следующий код : <h:commandButton label="Login" action="welcome"/> Значение атрибута action, согласно принятому соглашению при использовании фреймворка Facelets, является наименование страницы без указания расширения '.xhtml'. Если результат не начинается с символа обратного слеша '/' , то префикс определяется в виде пути текущего представления. Т.е. в нашем коде по нажатию на кнопку должен быть выполнен переход на страницу wellcome.xhtml. Соглашения, принятые в фреймворке Facelets, представлены на странице описания фреймворка JSF. Динамическая навигацияВ большинстве случаев навигация не является статической. Переход зависит не только от того, на какой кнопке выполнен щелчок, но и от того, какие определены входные данные. Например, отправка на сервер параметров авторизации в системе может иметь два результата: успешный и неудачный. Алгоритм обработки данных определен на сервере. Для обеспечения динамической навигации кнопка отправки должна иметь выражение метода (method expression). Пример динамической навигации : <h:commandButton label="Авторизация" action="# {userController.verifyUser}"/> В данном примере вызывается метод verifyUser managed bean класса userController. Выражение метода в атрибуте action не имеет параметров и возвращаемый им тип может быть любым. Возвращаемое методом значение преобразуется в строку путем вызова метода toString. Упрощенный пример класса userController. public class userController { public String verifyUser() { if (...) return "success"; else return "failure"; } } Примечание : Бизнес-логика динамической навигации определяется в файле конфигурации faces-config.xml. Ниже приведен типичный пример : <navigation-rule> <from-view-id>/index.xhtml</from-view-id> <navigation-case> <description>Успешная авторизация</description> <from-outcome>success</from-outcome> <to-view-id>/welcome.xhtml</to-view-id> </navigation-case> </navigation-rule> Условия динамической навигации определяются тегом <navigation-rule>. Согласно правилу, определенному в примере, результат "success" должен приводить к переходу на страницу welcome.xhtml, если он возникает во время работы со страницей index.xhtml. Правило навигации, navigation-ruleПравило навигации определяются тегом navigation-rule.
Перенаправление, redirect и faces-redirectИспользование навигации в JSF обеспечивает условный или безусловный переход, но при этом адрес страницы url не изменяется. По умолчанию JSF при переходе с одной XHTML-страницы на другую использует переадресацию (forward). Т.е. в нашем примере при переходе со страницы index.xhtml на страницу wellcome.xhtml содержание изменилось, а url остался прежним. Для изменения url страницы при переходе необходимо выполнить перенаправление с помощью тега <redirect> в файле конфигурации faces-config.xml. <navigation-rule> <from-view-id>/index.xhtml</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/welcome.xhtml</to-view-id> <redirect/> </navigation-case> </navigation-rule> Перенаправление в JSF происходит медленнее. Однако при перенаправлении обновляется адрес страницы. При определении статической навигации в интерфейсе для выполнения перенаправления необходимо использовать параметр faces-redirect в параметре определения страницы : <h:commandButton label="Login" action="welcome?faces-redirect=true"/> |