Каковы различия между ${} и # {}?

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

Есть ли различия? Кто они такие?

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

$ {Customer.name}
#{имя покупателя}

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

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

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

Ответ 5

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