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

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

Немедленное и отложенное выполнение

EL поддерживает как немедленное, так и отложенное выполнение выражений. Немедленное выполнение означает, что выражение вычисляется и результат возвращается, как только страница будет впервые отображена. Отложенное выполнение означает, что технология, использующая язык выражений, может использовать свой собственный механизм для выполнения выражения спустя некоторое время в течение жизненного цикла страницы, когда это будет уместно.

Выражения немедленного выполнения используют синтаксис ${}. Выражения отложенного выполнения используют синтаксис #{}.

Из-за своего многофазного жизненного цикла JavaServer Faces использует в основном выражения отложенного выполнения. В течение жизненного цикла события компонента обрабатываются, данные валидируются, а остальные задачи выполняются в определённом порядке. Следовательно, JavaServer Faces должна отложить вычисление выражений до соответствующей точки в жизненном цикле.

Другие технологии, использующие EL, могут иметь другие причины для использования отложенных выражений.

Немедленное выполнение

Все выражения, использующие синтаксис ${}, вычисляются немедленно. Эти выражения могут отображаться как часть текста шаблона или как значение атрибута тега, который может принимать выражения во время выполнения.

В следующем примере показан тег, чей атрибут value ссылается на выражение немедленного выполнения, которое обновляет количество книг, извлечённых из вспомогательного бина с именем catalog:

<h:outputText value="${catalog.bookQuantity}" />

JavaServer Faces вычисляет выражение ${catalog.bookQuantity}, конвертирует его и передаёт возвращённое значение обработчику тега. Значение обновляется на странице.

Отложенное выполнение

Выражения отложенного выполнения принимают форму #{expr} и могут быть выполнены в других фазах жизненного цикла страницы, как это определено для каждой технологии, использующей выражения EL. В случае JavaServer Faces его контроллер может выполнять выражение на разных этапах жизненного цикла, в зависимости от того, как выражение используется на странице.

В следующем примере показан тег JavaServer Faces h:inputText, представляющий текстовое поле, в который пользователь вводит значение. Атрибут value тега h:inputText ссылается на выражение отложенного выполнения, которое указывает на свойство name бина customer :

<h:inputText id="name" value="#{customer.name}" />

Для первоначального запроса страницы, содержащей этот тег, JavaServer Faces выполняет выражение #{customer.name} в фазе отрисовки ответа. В этой фазе выражение просто получает доступ к значению name из бина customer, как это делается при немедленном выполнении.

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

Как показывает этот пример, выражениями отложенного выполнения могут быть

  • Выражения значений, которые можно использовать как для чтения, так и для записи данных

  • Выражения методов

Выражения значений (как немедленного, так и отложенного выполнения) и выражения методов объясняются в следующем разделе.


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