Programuję w JSF2, a NetBeans tworzy wiele stron z #{}
zawierających wyrażenie. Jednak czasami w sieci znalazłem ${}
to samo!
Czy są jakieś różnice? Czym oni są?
Programuję w JSF2, a NetBeans tworzy wiele stron z #{}
zawierających wyrażenie. Jednak czasami w sieci znalazłem ${}
to samo!
Czy są jakieś różnice? Czym oni są?
Odpowiedzi:
#{}
są przeznaczone dla odroczonych wyrażeń (są rozwiązywane w zależności od cyklu życia strony) i mogą być używane do odczytu lub zapisu z lub do komponentu bean lub do wywołania metody .${}
są wyrażeniami do natychmiastowego rozwiązania , gdy tylko zostaną napotkane, zostaną rozwiązane. Są tylko do odczytu.Możesz przeczytać więcej tutaj: http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html
Wyszukiwanie w Google hasła „Java Server Faces dolar funt” dało następujący wynik na podstawie często zadawanych pytań dotyczących języka wyrażeń JBoss :
Dlaczego niektóre wyrażenia zaczynają się od funta, a inne od znaku dolara?
W samej specyfikacji EL nie ma różnicy. To od technologii używającej EL zależy, co to oznacza. Zarówno w przypadku JSP, jak i JSF wyrażenia rozpoczynające się od znaku funta oznaczają odroczoną ocenę, a znak dolara oznacza ocenę natychmiastową . Wszystko to ma związek z tym, kiedy wyrażenie zostanie faktycznie ocenione podczas przetwarzania żądania. Znak funta jest używany w komponentach JSF, ponieważ chcemy, aby wyrażenie było oceniane przez cykl życia JSF, a nie przez silnik JSP lub Facelets.
To dobre pytanie! Kiedyś się z tym zmierzyłem i podobnie jak Ty miałem duży problem ze znalezieniem odpowiedzi ... dopóki nie natknąłem się na ten fragment dokumentacji :
Jedną z kluczowych cech ujednoliconego EL jest obsługa zarówno natychmiastowej, jak i odroczonej oceny wyrażeń. Natychmiastowa ocena oznacza, że aparat JSP ocenia wyrażenie i zwraca wynik natychmiast po pierwszym renderowaniu strony. Ocena odroczona oznacza, że technologia używająca języka wyrażeń może wykorzystywać własne mechanizmy do oceny wyrażenia później w trakcie cyklu życia strony, jeśli jest to właściwe. Te wyrażenia, które są obliczane natychmiast, używają składni $ {}, która została wprowadzona w języku wyrażeń JSP 2.0. Wyrażenia, których ocena jest odroczona, używają składni # {}, która została wprowadzona w technologii JavaServer Faces.
JSF EL używa hasha (#), gdzie JSP EL używa znaku dolara ($) w jsf1.2 obie składnie zostały ujednolicone
Dokumentacja Java zawiera następujące wyjaśnienia:
$ {customer.name}
# {customer.name} W przypadku technologii JavaServer Faces, wyrażenie drugiego znacznika jest oceniane natychmiast po pierwszym żądaniu strony. W tym przypadku to wyrażenie działa jako wyrażenie r-wartości. Podczas żądania ogłaszania zwrotnego tego wyrażenia można użyć do ustawienia wartości właściwości name za pomocą danych wejściowych użytkownika. W tym przypadku wyrażenie działa jak wyrażenie lwartości.
Pierwsza z nich używa składni oceny natychmiastowej, podczas gdy druga używa składni oceny odroczonej. Pierwsze wyrażenie uzyskuje dostęp do właściwości name, pobiera jej wartość, dodaje wartość do odpowiedzi i jest renderowane na stronie. To samo może się zdarzyć z drugim wyrażeniem. Jednak program obsługi znacznika może odroczyć ocenę tego wyrażenia na późniejszy czas w cyklu życia strony, jeśli pozwala na to technologia wykorzystująca ten znacznik.
Przeczytaj więcej tutaj: wyrażenia wartości