Замечание:
За кулисами метод jsf.ajax.request()
библиотеки ресурсов JavaScript собирает данные, предоставленные тегом f:ajax
, и отправляет запрос в жизненный цикл JavaServer Faces.
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Чтобы задействовать функциональность Ajax, веб-приложение должно создать запрос Ajax и отправить его на сервер. Затем сервер обрабатывает запрос.
Приложение использует атрибуты тега f:ajax
, перечисленные в табл. 13-1, для создания запроса Ajax. В следующих разделах объясняется процесс создания и отправки Ajax-запроса с использованием некоторых из этих атрибутов.
Замечание: За кулисами метод |
Здесь рассматриваются следующие темы:
Атрибут 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. Фактически, это они и есть, разве что не имеют префикса |
Для командной кнопки событие по умолчанию — click
, поэтому не обязательно указывать event="click"
, чтобы получить желаемое поведение.
Атрибут 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
указывает, должен ли пользовательский ввод обрабатываться в ранних фазах жизненного цикла приложения или позже. Если для атрибута установлено значение true
, события, сгенерированные из этого компонента, передаются в фазе применения значений запроса. В противном случае события будут выполняться в фазе вызова приложения.
Если он не определён, значением этого атрибута по умолчанию является false
.
Атрибут listener
относится к выражению метода, которое выполняется на стороне сервера в ответ на действие Ajax на клиенте. Метод слушателя javax.faces.event.AjaxBehaviorListener.processAjaxBehavior
вызывается один раз в фазе жизненного цикла вызов приложения. В следующем коде из примера reservation
(см. Пример reservation) атрибут listener
определяется с помощью тега f:ajax
, который ссылается на метод из бина:
<f:ajax event="change" render="total"
listener="#{reservationBean.calculateTotal}"/>
Всякий раз, когда изменяется цена или количество заказанных билетов, метод calculateTotal
бина ReservationBean
пересчитывает общую стоимость билетов и отображает её в выходном компоненте с именем total
.
Назад | Вперёд | Содержание |