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

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

Отправка запроса Ajax

Чтобы задействовать функциональность Ajax, веб-приложение должно создать запрос Ajax и отправить его на сервер. Затем сервер обрабатывает запрос.

Приложение использует атрибуты тега f:ajax, перечисленные в табл. 13-1, для создания запроса Ajax. В следующих разделах объясняется процесс создания и отправки Ajax-запроса с использованием некоторых из этих атрибутов.

Замечание:

За кулисами метод jsf.ajax.request() библиотеки ресурсов JavaScript собирает данные, предоставленные тегом f:ajax, и отправляет запрос в жизненный цикл JavaServer Faces.

Здесь рассматриваются следующие темы:

Использование атрибута event

Атрибут event определяет событие, которое запускает действие Ajax. Вот некоторые из возможных значений этого атрибута: click, keyup, mouseover, focus и blur.

Если событие не указано, будет применено событие по умолчанию на основе родительского компонента. Событием по умолчанию является action для компонентов javax.faces.component.ActionSource, таких как commandButton, и valueChange для javax.faces.component.EditableValueHolder компонентов, таких как inputText. В следующем примере тег Ajax связан с компонентом кнопки, а событие, запускающее действие Ajax, представляет собой клик мыши:

<h:commandButton id="submit" value="Submit">
    <f:ajax event="click" />
</h:commandButton>
<h:outputText id="result" value="#{userNumberBean.response}" />

Примечание:

Возможно, вы заметили, что перечисленные события очень похожи на события JavaScript. Фактически, это они и есть, разве что не имеют префикса on.

Для командной кнопки событие по умолчанию — click, поэтому не обязательно указывать event="click", чтобы получить желаемое поведение.

Использование атрибута execute

Атрибут execute определяет компонент или компоненты, которые должны быть выполнены на сервере. Компонент идентифицируется его атрибутом id. Вы можете указать более одного исполняемого компонента. Если необходимо выполнить более одного компонента, укажите разделённый пробелами список компонентов.

Когда компонент выполняется, он участвует во всех фазах жизненного цикла обработки запросов, кроме фазы отрисовки ответа.

Значением атрибута execute также может быть ключевое слово, например @all, @none, @this или @form. Значением по умолчанию является @this, которое относится к компоненту, внутрь которого вложен тег f:ajax.

Следующий код указывает, что компонент h:inputText со значением id, равным userNo, должен выполняться при клике кнопки:

<h:inputText id="userNo"
             title="Type a number from 0 to 10:"
             value="#{userNumberBean.userNumber}">
    ...
</h:inputText>
<h:commandButton id="submit" value="Submit">
    <f:ajax event="click" execute="userNo" />
</h:commandButton>

Использование атрибута immediate

Атрибут immediate указывает, должен ли пользовательский ввод обрабатываться в ранних фазах жизненного цикла приложения или позже. Если для атрибута установлено значение true, события, сгенерированные из этого компонента, передаются в фазе применения значений запроса. В противном случае события будут выполняться в фазе вызова приложения.

Если он не определён, значением этого атрибута по умолчанию является false.

Использование атрибута listener

Атрибут listener относится к выражению метода, которое выполняется на стороне сервера в ответ на действие Ajax на клиенте. Метод слушателя javax.faces.event.AjaxBehaviorListener.processAjaxBehavior вызывается один раз в фазе жизненного цикла вызов приложения. В следующем коде из примера reservation (см. Пример reservation) атрибут listener определяется с помощью тега f:ajax, который ссылается на метод из бина:

<f:ajax event="change" render="total"
        listener="#{reservationBean.calculateTotal}"/>

Всякий раз, когда изменяется цена или количество заказанных билетов, метод calculateTotal бина ReservationBean пересчитывает общую стоимость билетов и отображает её в выходном компоненте с именем total.


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