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