<h:commandButton value="submit" action="response">
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Модель навигации JavaServer Faces позволяет легко задать навигацию по страницам и выполнить любую дополнительную обработку, необходимую для определения последовательности загрузки страниц.
В JavaServer Faces навигация — это набор правил для выбора следующей страницы или представления, которое будет отображаться после выполнения обработчика действия, например, клика кнопки или ссылки.
Навигация может быть неявной или задана пользователем. Неявная навигация вступает в игру, когда правила навигации не заданы пользователем в файлах конфигурации приложения.
Когда вы добавляете такой компонент, как commandButton
на страницу Facelets, и назначаете другую страницу в качестве значения для свойства action
, обработчик навигации по умолчанию будет пытаться неявно установить ей в соответствие подходящую страница приложения. В следующем примере обработчик навигации по умолчанию попытается найти страницу с именем response.xhtml
в приложении и перейти к ней:
<h:commandButton value="submit" action="response">
Определяемые пользователем правила навигации объявляются в таких файлах конфигурации приложения, как faces-config.xml
. Структура правила навигации по умолчанию выглядит следующим образом:
<navigation-rule>
<description></description
<from-view-id></from-view-id>
<navigation-case>
<from-action></from-action>
<from-outcome></from-outcome>
<if></if>
<to-view-id></to-view-id>
</navigation-case>
</navigation-rule>
Пользовательская навигация обрабатывается следующим образом.
Задайте правила в файле конфигурации приложения.
Обратитесь к строковому результату из атрибута action
кнопки или компонента ссылки. Этот результат String
используется JavaServer Faces для выбора правила навигации.
Вот пример правила навигации:
<navigation-rule>
<from-view-id>/greeting.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/response.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Это правило гласит, что когда компонент command (такой как h:commandButton
или h:commandLink
) в greeting.xhtml
активирован, приложение перейдёт со страницы greeting.xhtml
на страницу response.xhtml
, если результатом вычисления обработчика компонента кнопки будет success
. Вот тег h:commandButton
из greeting.xhtml
, который будет указывать логический результат success
:
<h:commandButton id="submit" value="Submit" action="success"/>
Как показано в примере, каждый элемент navigation-rule
определяет, как добраться с одной страницы (указанной в элементе from-view-id
) на другие страницы приложения. Элементы navigation-rule
могут содержать любое количество элементов navigation-case
, каждый из которых определяет следующую страницу, которую нужно открыть (определяется to-view-id
) на основе логического результата (определяется как from-outcome
).
В более сложных приложениях логический результат также может быть получен из возвращаемого методом-обработчиком значения в Managed-бине. Этот метод выполняет некоторую обработку для определения результата. Например, метод может проверить, совпадает ли пароль, введённый пользователем на странице, с паролем в файле. Если это так, метод может вернуть success
. В противном случае он может вернуть failure
. В результате failure
может произойти перезагрузка страницы входа. В результате success
может открыться страница, отображающая активность по кредитной карте пользователя. Если вы хотите, чтобы результат был возвращён методом в компоненте, вы должны обратиться к методу, используя выражение метода в атрибуте action
, как показано в этом примере:
<h:commandButton id="submit" value="Submit"
action="#{cashierBean.submit}" />
Когда пользователь кликает кнопку, представленную этим тегом, соответствующий компонент генерирует событие действия. Это событие по умолчанию обрабатывается объектом javax.faces.event.ActionListener
, который вызывает метод-обработчик, на который ссылается компонент, вызвавший событие. Метод-обработчик возвращает логический результат слушателю.
Слушатель передаёт логический результат и ссылку на метод-обработчик, который создал результат, по умолчанию javax.faces.application.NavigationHandler
. NavigationHandler
выбирает следующую страницу для отображения, сопоставляя результат или ссылку на метод-обработчик с правилами навигации в файле конфигурации приложения с помощью следующего процесса.
NavigationHandler
выбирает правило навигации, соответствующее отображаемой странице.
Он сопоставляет результат или ссылку на метод-обработчик, полученный из javax.faces.event.ActionListener
по умолчанию, с теми, которые определены в правилах навигации.
Он пытается сопоставить и ссылку на метод, и результат с одним и тем же правилом навигации.
Если предыдущий шаг завершается неудачно, обработчик навигации пытается сопоставить результат.
Наконец, обработчик навигации пытается сопоставить ссылку на метод-обработчик, если предыдущие две попытки потерпели неудачу.
Если ни один из вариантов навигации не совпадает, он снова отображает тот же вид.
Когда NavigationHandler
устанавливает соответствия, начинается фаза отрисовки ответа. В этой фазе будет отображена страница, выбранная NavigationHandler
.
Приложение-пример Duke’s Tutoring использует правила навигации в бизнес-методах, которые обрабатывают создание, редактирование и удаление пользователей приложения. Например, форма для создания студента имеет тег h:commandButton
:
<h:commandButton id="submit"
action="#{adminBean.createStudent(studentManager.newStudent)}"
value="#{bundle['action.submit']}"/>
Событие действия вызывает метод dukestutoring.ejb.AdminBean.createStudent
:
public String createStudent(Student student) {
em.persist(student);
return "createdStudent";
}
Возвращаемое значение creationStudent
имеет соответствующее правило навигации в файле конфигурации faces-config.xml
:
<navigation-rule>
<from-view-id>/admin/student/createStudent.xhtml</from-view-id>
<navigation-case>
<from-outcome>createdStudent</from-outcome>
<to-view-id>/admin/index.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
После создания студента пользователь возвращается на начальную страницу администрирования.
Для получения дополнительной информации о том, как задать правила навигации, см. Настройка правил навигации.
Для получения дополнительной информации о том, как реализовать методы-обработчики для обработки навигации, смотрите Пишем метод-обработчик действия.
Для получения дополнительной информации о том, как ссылаться на результаты или методы действий из тегов компонента, см. Ссылка на метод, который выполняет навигацию.
Назад | Вперёд | Содержание |