JavaServer Faces поддерживает события действий и события изменения значений для компонентов.
События действия происходят, когда пользователь активирует компонент, который реализует javax.faces.component.ActionSource
. Эти события представлены классом javax.faces.event.ActionEvent
.
События изменения значения происходят, когда пользователь изменяет значение компонента, который реализует javax.faces.component.EditableValueHolder
. Эти события представлены классом javax.faces.event.ValueChangeEvent
.
Одним из способов обработки событий является реализация соответствующих классов слушателей. Классы слушателей, которые обрабатывают события действия в приложении, должны реализовывать интерфейс javax.faces.event.ActionListener
. Точно так же слушатели, которые обрабатывают события изменения значения, должны реализовать интерфейс javax.faces.event.ValueChangeListener
.
В этом разделе объясняется, как реализовать два класса слушателей.
Для обработки событий, генерируемых кастомными компонентами, необходимо реализовать слушатель событий и обработчик событий и вручную поставить событие в очередь на компоненте. Смотрите Обработка событий для кастомных компонентов для получения дополнительной информации.
Вам не нужно создавать реализацию ActionListener для обработки события, которое приводит исключительно к переходу на страницу и не выполняет никакой другой специфичной для приложения обработки. Смотрите Пишем метод для обработки навигации для получения информации о том, как управлять навигацией по страницам.
|
Реализация слушателей изменения значения
Реализация javax.faces.event.ValueChangeListener
должна включать метод processValueChange(ValueChangeEvent)
. Этот метод обрабатывает указанное событие изменения значения и вызывается JavaServer Faces, когда происходит событие изменения значения. Объект ValueChangeEvent
хранит старые и новые значения компонента, вызвавшего событие.
В примере Duke's Bookstore реализация слушателя NameChanged
зарегистрирована в name
компонента UIInput
на странице bookcashier.xhtml
. Этот слушатель сохраняет в области видимости сессии имя, введённое пользователем в поле, соответствующем компоненту имени.
bookreceipt.xhtml
впоследствии получает имя из области видимости сессии:
<h:outputFormat title="thanks"
value="#{bundle.ThankYouParam}">
<f:param value="#{sessionScope.name}"/>
</h:outputFormat>
Когда страница bookreceipt.xhtml
загружена, в сообщении отображается имя:
"Thank you, {0}, for purchasing your books from us."
Вот часть реализации слушателя NameChanged
:
public class NameChanged extends Object implements ValueChangeListener {
@Override
public void processValueChange(ValueChangeEvent event)
throws AbortProcessingException {
if (null != event.getNewValue()) {
FacesContext.getCurrentInstance().getExternalContext().
getSessionMap().put("name", event.getNewValue());
}
}
}
Когда пользователь вводит имя в поле, генерируется событие изменения значения и вызывается метод processValueChange(ValueChangeEvent)
реализации слушателя NameChanged
. Этот метод получает идентификатор компонента, вызвавшего событие, из объекта ValueChangeEvent
и помещает значение вместе с именем атрибута в сессию объекта FacesContext
.
Реализация слушателей действий
Реализация javax.faces.event.ActionListener
должна включать метод processAction(ActionEvent)
. Метод processAction(ActionEvent)
обрабатывает указанное событие действия. JavaServer Faces вызывает метод processAction(ActionEvent)
когда происходит ActionEvent
.
В примере Duke's Bookstore используются две реализации ActionListener
, LinkBookChangeListener
и MapBookChangeListener
. Смотрите Обработка событий для кастомных компонентов для получения подробной информации о MapBookChangeListener
.