В чем разница между $ {} и # {}? - PullRequest
71 голосов
/ 09 января 2012

Я программирую на JSF2, и NetBeans создает много страниц с #{}, который содержит выражение. Однако иногда в Интернете я нашел ${} для того же самого!

Есть ли различия? Что они?

Ответы [ 5 ]

83 голосов
/ 09 января 2012
  • #{} для отложенных выражений (они разрешены в зависимости от жизненного цикла страницы) и может использоваться для чтения или писать из или в bean или сделать вызов метода .
  • ${} - выражения для немедленного разрешения , как только они столкнулись они решены. Они доступны только для чтения.

Подробнее вы можете прочитать здесь: http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html

10 голосов
/ 09 января 2012

Поиск в Google по запросу "Доллар фунта Java Server Faces" дал следующий результат из часто задаваемых вопросов о языке выражений JBoss :

Почему некоторые выражения начинаются с фунта, а другиеначать со знака доллара?

Для самой спецификации EL разницы нет.Это зависит от технологии, использующей EL, чтобы решить, что это значит.Как для JSP, так и для JSF выражения, начинающиеся со знака фунта, означают отложенную оценку , а знак доллара означает немедленную оценку .Все это связано с , когда выражение будет фактически оцениваться во время обработки запроса.Знак решетки используется в компонентах JSF, потому что мы хотим, чтобы выражение оценивалось жизненным циклом JSF, а не механизмом JSP или Facelets.

8 голосов
/ 09 января 2012

Хороший вопрос!Я сталкивался с этим один раз, и, как и вы, у меня было много проблем с поиском ответа ... пока я не наткнулся на этот кусок документации :

Одна ключевая особенность объединенного ELявляется его поддержкой для немедленной и отложенной оценки выражений.Немедленная оценка означает, что механизм JSP оценивает выражение и возвращает результат сразу же при первой визуализации страницы.Отсроченная оценка означает, что технология, использующая язык выражений, может использовать свой собственный механизм для оценки выражения спустя некоторое время в течение жизненного цикла страницы, когда это будет уместно.Те выражения, которые оцениваются, немедленно используют синтаксис $ {}, который был представлен с языком выражений JSP 2.0.Выражения, оценка которых отложена, используют синтаксис # {}, введенный с помощью технологии JavaServer Faces.

5 голосов
/ 21 июля 2016

Документация Java дает следующее объяснение:

$ {customer.name}
# {customer.name}

Первый использует синтаксис немедленной оценки, тогда как второй использует синтаксис отложенной оценки. Первое выражение обращается к свойству name, получает его значение, добавляет значение к ответу и отображается на странице. То же самое может случиться со вторым выражением. Однако обработчик тега может отложить оценку этого выражения на более позднее время в жизненном цикле страницы, если технология, использующая этот тег, позволяет.

В случае технологии JavaServer Faces выражение последнего тега имеет вид оценивается сразу во время первоначального запроса на странице. В этом случае это выражение действует как выражение rvalue. Во время запроса обратной передачи это выражение может использоваться для установки значения свойства name с помощью пользовательского ввода. В этом случае выражение действует как выражение lvalue.

Подробнее здесь: выражения значения

4 голосов
/ 09 января 2012

JSF EL использует хеш (#), где JSP EL использует знак доллара ($) в jsf1.2, оба синтаксиса были унифицированы

...