Введение в JSF EL 2
1. Вступление
Expression Language (EL) - это язык сценариев, который был принят во многих средах Java, таких как Spring сSpEL и JBoss с JBoss EL.
В этой статье мы сосредоточимся на реализации JSF этого языка сценариев - Unified EL.
В настоящее время EL находится в версии 3.0, серьезном обновлении, позволяющем использовать процессор в автономном режиме, например, на платформе Java SE. Предыдущие версии зависели от JavaEE-совместимого сервера приложений или веб-контейнера. В этой статье обсуждается EL версии 2.2.
2. Немедленная и отложенная оценка
Основная функция EL в JSF заключается в соединении представления JSF (обычно разметки XHTML) и серверной части на основе Java. Внутренняя часть может быть управляемыми компонентами, созданными пользователем, или объектами, управляемыми контейнером, такими как сеанс HTTP.
Мы будем смотреть на EL 2.2. EL в JSF имеет две основные формы: непосредственный синтаксис EL и отложенный синтаксис EL.
2.1. Непосредственный синтаксис EL
Также известный как JSP EL, это формат сценариев, который является пережитком дней JSP разработки веб-приложений на Java.
Выражения JSP EL начинаются со знака доллара ($), за ним следует левая фигурная скобка (\{), затем следует фактическое выражение и, наконец, закрывается правой фигурной скобкой (}):
${ELBean.value > 0}
Этот синтаксис:
-
Оценивается только один раз (в начале) в жизненном цикле страницы. Это означает, что это ценность. Читаемость по выражению в примере выше должна быть установлена до загрузки страницы.
-
Предоставляет доступ только для чтения к значениям бина.
-
И, как результат, требует соблюдения соглашения об именах JavaBean.
Для большинства применений эта форма EL не очень универсальна.
2.2. Отсроченное исполнение EL
Отложенное выполнение EL - это EL, разработанный специально для JSF. Основное синтаксическое отличие JSP EL заключается в том, что он помечен «#” вместо«$ ».
#{ELBean.value > 0}
Отложенный EL:
-
Синхронизирован с жизненным циклом JSF. Это означает, что выражение EL в отложенном EL оценивается в разных точках рендеринга страницы JSF (в начале и в конце).
-
Предоставляет доступ на чтение и запись к значениям bean. Это позволяет установить значение в базовом компоненте JSF (или где-либо еще), используя EL.
-
Позволяет программисту вызывать произвольные методы объекта и, в зависимости от версии EL, передавать аргументы таким методам.
Unified EL - это спецификация, которая объединяет отложенный EL и JSP EL, позволяя использовать оба синтаксиса на одной странице.
3. Единый EL
Unified EL допускает два основных вида выражений: выражения значений и выражения методов.
И короткое примечание - в следующих разделах будут показаны некоторые примеры, которые все доступны в приложении (см. Ссылку на Github в конце), перейдя к:
http://localhost:8080/jsf/el_intro.jsf
3.1. Выражения ценностей
Выражение значения позволяет нам либо читать, либо устанавливать свойство управляемого компонента в зависимости от того, где оно размещено.
Следующее выражение читает свойство управляемого компонента на странице:
Hello, #{ELBean.firstName}
Однако следующее выражение позволяет нам установить значение для объекта пользователя:
Переменная должна соответствовать соглашению об именах JavaBean, чтобы иметь право на такой вид обработки. Для того, чтобы значение bean-компонента было зафиксировано, вмещающую форму просто необходимо сохранить.
3.2. Выражения метода
Unified EL предоставляет выражения методов для выполнения открытых нестатических методов изнутри страницы JSF. Методы могут иметь или не иметь возвращаемые значения.
Вот быстрый пример:
Упомянутый методsave() определен в вспомогательном компоненте с именемELBean.
Начиная с EL 2.2, вы также можете передавать аргументы методу, доступ к которому осуществляется с помощью EL. Это может позволить нам переписать наш пример таким образом:
Здесь мы создали выражение привязки на уровне страницы для компонентаinputText и напрямую передали атрибутvalue в выражение метода.
Обратите внимание, что переменная передается методу без каких-либо специальных обозначений, фигурных скобок или escape-символов.
3.3. Неявные объекты EL
Механизм JSF EL обеспечивает доступ к нескольким объектам, управляемым контейнером. Некоторые из них:
-
{Application}: также доступен как{servletContext}, это объект, представляющий экземпляр веб-приложения.
-
#{applicationScope}: карта переменных, доступных для всего веб-приложения
-
#{Cookie}: карта переменных HTTP Cookie
-
#{facesContext}: текущий экземплярFacesContext
-
#{flash}: объект с областью действия JSF Flash
-
#{header}: карта заголовков HTTP в текущем запросе
-
#{initParam}: карта переменных инициализации контекста веб-приложения
-
#{param}: карта параметров запроса HTTP-запроса
-
#{request}: объектHTTPServletRequest
-
#{requestScope}: карта переменных в области запроса
-
#{sessionScope}: карта переменных в области сеанса
-
#{session}: объектHTTPSession
-
#{viewScope}: карта переменных в области просмотра (страницы)
В следующем простом примере перечислены все заголовки и значения запроса путем доступа к неявному объектуheaders:
#{header.key}
#{header.value}
4. Что вы можете сделать в EL
Благодаря своей универсальности EL может быть включен в код Java, разметку XHTML, Javascript и даже в файлы конфигурации JSF, такие как файлfaces-config.xml. Давайте рассмотрим несколько конкретных вариантов использования.
4.1. Используйте EL в разметке страницы
EL может быть представлен в стандартных тегах HTML:
4.2. Используйте EL в JavaScript
EL будет интерпретироваться при обнаружении в тегах Javascript или
Переменная bean-компонента будет установлена здесь как переменная javascript.
4.3. Вычислить логику в EL с помощью операторов
EL поддерживает довольно продвинутые операторы сравнения:
-
Оператор равенстваeq, эквивалентный «==.”
-
lt меньше, чем оператор, что эквивалентно «<.»
-
le меньше или равно оператору, что эквивалентно «⇐».
-
gt больше, чем оператор, что эквивалентно «>.»
-
ge больше или равно, что эквивалентно «>=.»
4.4. Оценить EL в резервном компоненте
Из бэк-кода компонента можно оценить выражение EL с помощью приложения JSF. Это открывает целый мир возможностей, связывая страницу JSF с компонентом поддержки. Вы можете извлечь неявные объекты EL или получить реальные компоненты HTML-страницы или их значение из базового компонента:
FacesContext ctx = FacesContext.getCurrentInstance();
Application app = ctx.getApplication();
String firstName = app.evaluateExpressionGet(ctx, "#{firstName.value}", String.class);
HtmlInputText firstNameTextBox = app.evaluateExpressionGet(ctx, "#{firstName}", HtmlInputText.class);
Это дает разработчику большую гибкость при взаимодействии со страницей JSF.