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.