В чем разница между ${} и #{}?


я программирую в JSF2 и netbeans создает много страниц с #{} который содержит выражение.

однако иногда в Интернете я нашел ${} за то же самое!

есть ли различия? Что это такое?

Google игнорирует символы # и $ Так что это затрудняет поиск.

5 67

5 ответов:

#{} для отложенных выражений (отложенные выражения разрешаются в зависимости от жизненного цикла Страницы) и могут использоваться для чтения или записи из или в зернах или сделать вызов метода. ${} выражения для немедленного разрешения, как только они возникают, они решаются. Они доступны только для чтения. Вы можете прочитать больше здесь: http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html

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

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

для самой спецификации 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 оба синтаксиса были унифицированы