В чем разница между ${} и #{}?
я программирую в JSF2 и netbeans создает много страниц с #{}
который содержит выражение.
однако иногда в Интернете я нашел ${}
за то же самое!
есть ли различия? Что это такое?
Google игнорирует символы #
и $
Так что это затрудняет поиск.
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.подробнее здесь: выражения