<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
.
Как показывает этот пример, выражениями отложенного выполнения могут быть
Выражения значений, которые можно использовать как для чтения, так и для записи данных
Выражения методов
Выражения значений (как немедленного, так и отложенного выполнения) и выражения методов объясняются в следующем разделе.
Назад | Вперёд | Содержание |