Я программирую на JSF2, и NetBeans создает много страниц с #{}, который содержит выражение. Однако иногда в Интернете я нашел ${} для того же самого!
#{}
${}
Есть ли различия? Что они?
Подробнее вы можете прочитать здесь: http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html
Поиск в Google по запросу "Доллар фунта Java Server Faces" дал следующий результат из часто задаваемых вопросов о языке выражений JBoss :
Почему некоторые выражения начинаются с фунта, а другиеначать со знака доллара? Для самой спецификации EL разницы нет.Это зависит от технологии, использующей EL, чтобы решить, что это значит.Как для JSP, так и для JSF выражения, начинающиеся со знака фунта, означают отложенную оценку , а знак доллара означает немедленную оценку .Все это связано с , когда выражение будет фактически оцениваться во время обработки запроса.Знак решетки используется в компонентах JSF, потому что мы хотим, чтобы выражение оценивалось жизненным циклом JSF, а не механизмом JSP или Facelets.
Для самой спецификации EL разницы нет.Это зависит от технологии, использующей EL, чтобы решить, что это значит.Как для JSP, так и для JSF выражения, начинающиеся со знака фунта, означают отложенную оценку , а знак доллара означает немедленную оценку .Все это связано с , когда выражение будет фактически оцениваться во время обработки запроса.Знак решетки используется в компонентах JSF, потому что мы хотим, чтобы выражение оценивалось жизненным циклом JSF, а не механизмом JSP или Facelets.
Хороший вопрос!Я сталкивался с этим один раз, и, как и вы, у меня было много проблем с поиском ответа ... пока я не наткнулся на этот кусок документации :
Одна ключевая особенность объединенного ELявляется его поддержкой для немедленной и отложенной оценки выражений.Немедленная оценка означает, что механизм JSP оценивает выражение и возвращает результат сразу же при первой визуализации страницы.Отсроченная оценка означает, что технология, использующая язык выражений, может использовать свой собственный механизм для оценки выражения спустя некоторое время в течение жизненного цикла страницы, когда это будет уместно.Те выражения, которые оцениваются, немедленно используют синтаксис $ {}, который был представлен с языком выражений JSP 2.0.Выражения, оценка которых отложена, используют синтаксис # {}, введенный с помощью технологии JavaServer Faces.
Документация Java дает следующее объяснение:
$ {customer.name} # {customer.name} Первый использует синтаксис немедленной оценки, тогда как второй использует синтаксис отложенной оценки. Первое выражение обращается к свойству name, получает его значение, добавляет значение к ответу и отображается на странице. То же самое может случиться со вторым выражением. Однако обработчик тега может отложить оценку этого выражения на более позднее время в жизненном цикле страницы, если технология, использующая этот тег, позволяет. В случае технологии JavaServer Faces выражение последнего тега имеет вид оценивается сразу во время первоначального запроса на странице. В этом случае это выражение действует как выражение rvalue. Во время запроса обратной передачи это выражение может использоваться для установки значения свойства name с помощью пользовательского ввода. В этом случае выражение действует как выражение lvalue.
Подробнее здесь: выражения значения
JSF EL использует хеш (#), где JSP EL использует знак доллара ($) в jsf1.2, оба синтаксиса были унифицированы