У чому різниця між $ {} і # {}?


80

Я програмую на JSF2, і NetBeans створює багато сторінок, #{}що містять вираз. Однак іноді в Інтернеті я знаходив ${}те саме!

Чи є відмінності? Хто вони?

Відповіді:


91
  • #{} are for deferred expressions (they are resolved depending on the life cycle of the page) and can be used to read or write from or to a bean or to make a method call.
  • ${} are expressions for immediate resolution, as soon as they are encountered they are resolved. They are read-only.

You can read more here: http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html


12

Пошук у Google за запитом "Java Server Faces долар фунт" дав наступний результат із поширених запитань про мову мови JBoss :

Чому деякі вирази починаються з фунта, а інші - зі знака долара?

Для самої специфікації EL різниці немає. Технологія, що використовує ЕЛ, вирішує, що це означає. Як для JSP, так і для JSF, вирази, що починаються зі знака фунта, означають відкладену оцінку, а знак долара - негайну оцінку. Це все пов’язано з тим, коли вираз насправді буде оцінено під час обробки запиту. Знак фунта використовується в компонентах JSF, оскільки ми хочемо, щоб вираз оцінювався за життєвим циклом JSF, а не за допомогою механізму JSP або Facelets.


1
@ jean hominal: дякую вам за відповідь ... як я писав, я намагався шукати за допомогою $ і #, і це не спрацьовувало ... howecver Я не знав, що ви називаєте # "фунт"! Тож дякую вам і за цю інформацію!
Filippo1980,

9

Це гарне запитання! Я зіткнувся з цим одного разу, і як у вас, було багато проблем з пошуком відповіді ... поки я не наткнувся на цю документацію :

Однією з ключових особливостей уніфікованої ЕЛ є підтримка як негайної, так і відкладеної оцінки виразів. Безпосередня оцінка означає, що механізм JSP обробляє вираз і негайно повертає результат, коли сторінка відображається вперше. Відкладене оцінювання означає, що технологія, що використовує мову виразів, може використовувати власну техніку для оцінки виразу десь пізніше протягом життєвого циклу сторінки, коли це доречно. Ті вирази, які обчислюються негайно, використовують синтаксис $ {}, який був введений із мовою виразів JSP 2.0. Вирази, оцінка яких відкладена, використовують синтаксис # {}, який було введено за допомогою технології JavaServer Faces.



5

Документація Java містить таке пояснення:

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

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

У випадку з технологією JavaServer Faces вираз останнього тегу оцінюється негайно під час початкового запиту на сторінку. У цьому випадку цей вираз діє як вираз rvalue. Під час запиту зворотного зворотного зв'язку цей вираз можна використовувати для встановлення значення властивості name за допомогою вводу користувача. У цьому випадку вираз діє як вираз lvalue.

Детальніше читайте тут: вирази значень

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.