- JavaScript выполняется клиентом.
- Выражения языка выражений оцениваются на сервере перед отправкой разметки в браузер.
#{foo = bar}
не является допустимым выражением EL.=
не является действительным оператором в EL.EL не имеет оператора присваивания.Единственный способ присвоить значения через EL - это использовать привязку значений в атрибутах, которые их поддерживают (почти исключительно через элементы управления вводом JSF).
Если вычисляется это выражение:
#{rich:clientId(id)}
Это выражение будет искать в областях request , application и application , использующих getAttribute("id")
, используя механизмы управляемого компонента для создания такого компонента, если он определен с помощьюэтот идентификаторКогда это вычисляется и возвращает ноль, ничего не будет отображено.
Если это выражение не вычислено:
#{rich:clientId(id)}
Затем оно помещается втекст шаблона (возможно, в JSP 2.0 / J2EE 1.4.)
Существует два типа выражения EL:
#{foo}
- отложенное выражение : только оцениваетсяв атрибутах, которые позволяют им ${foo}
- непосредственное выражение : разрешено в тексте шаблона
Начиная с JSP 2.1, ошибка перевода иметьотложенное выражение в тексте шаблона.Из спецификации JSP 2.1:
При использовании в тексте шаблона на странице JSP последовательность символов #{
вызывает ошибку перевода, если это специально не разрешено в настройке конфигурации.Это связано с тем, что синтаксис #{}
связан исключительно с отложенной оценкой в JSP 2.1 и не имеет смысла в контексте текста шаблона (в тексте шаблона имеет смысл только немедленная оценка с использованием синтаксиса ${expr}
).
В файле тега #{expr}
в тексте шаблона обрабатывается в соответствии с версией JSP файла тега: Если версия JSP файла тега составляет 2.0 или менее, #{expr}
в тексте шаблона не вызовет никаких ошибок.Если версия JSP файла тега равна или больше 2,1, #{expr}
в тексте шаблона должно вызвать ошибку, если только он не был экранирован или файл тега не содержит атрибут директивы тега deferredSyntaxAllowedAsLiteral
, установленный в TRUE
.
Обычно выражения #{foo}
должны быть только в управляющих атрибутах JSF (для представлений JSP).
Если вы хотите изменить значение на стороне сервера, используйте отправку формыи действие обязательное.Это можно сделать с помощью AJAX в RichFaces.