Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Реализация слушателя событий

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.

Регистрация слушателя действия в компоненте объясняет, как зарегистрировать этого слушателя в компоненте.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)