Навигация между различными страницами приложения JavaServer Faces, например выбор следующей страницы, которая будет отображаться после клика кнопки или ссылки, определяется набором правил. Правила навигации могут быть неявными, либо они могут быть явно определены в файле конфигурации приложения. Для получения дополнительной информации о неявных правилах навигации см. Модель навигации.
Каждое правило навигации определяет, как перемещаться с одной страницы на другую или набор страниц. JavaServer Faces выбирает подходящее правило навигации в соответствии с тем, какая страница отображается в данный момент.
После того, как правило навигации выбрано, выбор той страницы, к которой следует перейти с текущей страницы, зависит от двух факторов:
-
Метод действия, вызываемый при клике компонента
-
Результат, на который ссылается тег компонента или который возвращается из метода действия
Результатом может быть всё, что выберет разработчик, но таблица 16-3 перечисляет некоторые результаты, обычно используемые в веб-приложениях.
Таблица 16-3 Строки общего результата
Результат |
Что это означает |
success
|
Всё работает как надо. Перейти на следующую страницу. |
failure
|
Что-то не так. Перейти на страницу с ошибкой. |
login
|
Сначала пользователь должен войти в систему. Перейти на страницу входа. |
no results
|
Поиск не дал результатов. Снова перейти на страницу поиска. |
Обычно метод действия выполняет некоторую обработку данных формы текущей страницы. Например, метод может проверить, соответствуют ли имя пользователя и пароль, введённые на форме, имени пользователя и паролю в файле. Если они совпадают, метод возвращает результат success
. В противном случае он возвращает результат failure
. Как показывает этот пример, и метод, используемый для обработки действия, и возвращаемый результат необходимы для определения подходящей страницы для перехода.
Вот правило навигации, которое можно использовать с только что описанным примером:
<navigation-rule>
<from-view-id>/login.xhtml</from-view-id>
<navigation-case>
<from-action>#{LoginForm.login}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/storefront.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-action>#{LoginForm.logon}</from-action>
<from-outcome>failure</from-outcome>
<to-view-id>/logon.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Это правило навигации определяет возможные способы навигации из login.xhtml
. Каждый элемент navigation-case
определяет один возможный путь навигации из login.xhtml
. Первый navigation-case
говорит, что если LoginForm.login
вернёт результат success
, то будет выполнен переход на storefront.xhtml
. Второй navigation-case
говорит, что login.xhtml
будет перерисован, если LoginForm.login
вернёт failure
.
Конфигурация Flow страниц приложения состоит из набора правил навигации. Каждое правило определяется элементом navigation-rule
в файле faces-config.xml
.
Каждый элемент navigation-rule
соответствует одному идентификатору дерева компонентов, определённому необязательным элементом from-view-id
. Это означает, что каждое правило определяет все возможные способы перехода с одной конкретной страницы в приложении. Если элемент from-view-id
отсутствует, правила навигации, определённые в элементе navigation-rule
, применяются ко всем страницам приложения. Элемент from-view-id
также позволяет использовать шаблоны подстановочных знаков. Например, этот элемент from-view-id
говорит, что правило навигации применяется ко всем страницам в каталоге books
:
<from-view-id>/books/*</from-view-id>
Элемент navigation-rule
может содержать ноль или более элементов navigation-case
. Элемент navigation-case
определяет набор критериев соответствия. Когда эти критерии будут выполнены, приложение перейдёт на страницу, определённую элементом to-view-id
, содержащимся в том же элементе navigation-case
.
Критерии навигации определяются необязательными элементами from-result
и from-action
. Элемент from-result
определяет строковый результат, такой как success
. Элемент from-action
использует выражение метода для ссылки на метод действия, который возвращает String
, что является результатом. Метод выполняет некоторую логику обработки и возвращает результат.
Элементы navigation-case
проверяются по результату и выражению метода в следующем порядке.
-
Случаи, указывающие как значение from-result
, так и значение from-action
. Оба эти элемента могут использоваться, если метод действия возвращает разные результаты в зависимости от результата обработки, которую он выполняет.
-
Случаи, указывающие только значение from-result
. Элемент from-result
должен соответствовать либо результату, определённому атрибутом action
компонента javax.faces.component.UICommand
, либо возвращаемому результату с помощью метода, указанного компонентом UICommand
.
-
Случаи, указывающие только значение from-action
. Это значение должно соответствовать выражению action
, указанному в теге компонента.
При совпадении любого из этих случаев для визуализации будет выбрано дерево компонентов, определённое элементом to-view-id
.