<h:outputText value="${catalog.bookQuantity}" />
|
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.
Как показывает этот пример, выражениями отложенного выполнения могут быть
Выражения значений, которые можно использовать как для чтения, так и для записи данных
Выражения методов
Выражения значений (как немедленного, так и отложенного выполнения) и выражения методов объясняются в следующем разделе.
| Назад | Вперёд | Содержание |
Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены.
Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)