Was sind die Unterschiede zwischen $ {} und # {}?


80

Ich programmiere in JSF2 und NetBeans erstellt viele Seiten #{}, die einen Ausdruck enthalten. Allerdings habe ich manchmal im Web ${}für das gleiche gefunden!

Gibt es Unterschiede? Was sind Sie?

Antworten:


91
  • #{}sind für verzögerte Ausdrücke (sie werden abhängig vom Lebenszyklus der Seite aufgelöst) und können zum Lesen oder Schreiben von oder in eine Bean oder zum Ausführen eines Methodenaufrufs verwendet werden .
  • ${}sind Ausdrücke für eine sofortige Lösung , sobald sie angetroffen werden, werden sie aufgelöst. Sie sind schreibgeschützt.

Weitere Informationen finden Sie hier: http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html


12

Eine Google-Suche nach "Java Server Faces Dollar Pound" ergab das folgende Ergebnis aus den häufig gestellten Fragen zur JBoss Expression Language :

Warum beginnen einige Ausdrücke mit Pfund und andere mit Dollarzeichen?

Für die EL-Spezifikation selbst gibt es keinen Unterschied. Es liegt an der Technologie, die die EL verwendet, um zu entscheiden, was sie bedeutet. Sowohl für JSP als auch für JSF bedeuten Ausdrücke, die mit einem Pfundzeichen beginnen, eine verzögerte Bewertung und ein Dollarzeichen eine sofortige Bewertung. Dies alles hat damit zu tun, wann der Ausdruck während der Anforderungsverarbeitung tatsächlich ausgewertet wird. Das Nummernzeichen wird in JSF-Komponenten verwendet, da der Ausdruck vom JSF-Lebenszyklus und nicht von der JSP- oder Facelets-Engine ausgewertet werden soll.


1
@ Jean Hominal: Danke für deine Antwort ... als ich schrieb, habe ich versucht, mit $ und # zu suchen und es hat nicht funktioniert ... aber ich wusste nicht, dass du # "Pfund" nennst! Vielen Dank auch für diese Informationen!
Filippo1980

9

Das ist eine gute Frage! Ich habe es einmal gesehen und hatte wie Sie große Probleme, die Antwort zu finden ... bis ich auf diese Dokumentation stieß :

Ein wesentliches Merkmal der einheitlichen EL ist ihre Unterstützung für die sofortige und verzögerte Bewertung von Ausdrücken. Sofortige Auswertung bedeutet, dass die JSP-Engine den Ausdruck auswertet und das Ergebnis sofort zurückgibt, wenn die Seite zum ersten Mal gerendert wird. Aufgeschobene Auswertung bedeutet, dass die Technologie, die die Ausdruckssprache verwendet, ihre eigene Maschinerie verwenden kann, um den Ausdruck einige Zeit später während des Lebenszyklus der Seite auszuwerten, wann immer dies angemessen ist. Die Ausdrücke, die sofort ausgewertet werden, verwenden die Syntax $ {}, die mit der Ausdruckssprache JSP 2.0 eingeführt wurde. Ausdrücke, deren Auswertung verschoben wird, verwenden die Syntax # {}, mit der die JavaServer Faces-Technologie eingeführt wurde.



5

Die Java-Dokumentation enthält die folgende Erklärung:

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

Ersteres verwendet die Syntax für die sofortige Auswertung, während letzteres die Syntax für die verzögerte Auswertung verwendet. Der erste Ausdruck greift auf die Eigenschaft name zu, erhält seinen Wert, fügt den Wert zur Antwort hinzu und wird auf der Seite gerendert. Das gleiche kann mit dem zweiten Ausdruck passieren. Der Tag-Handler kann die Auswertung dieses Ausdrucks jedoch auf einen späteren Zeitpunkt im Seitenlebenszyklus verschieben, wenn die Technologie, die dieses Tag verwendet, dies zulässt.

Bei der JavaServer Faces-Technologie wird der Ausdruck des letzteren Tags sofort während einer ersten Anforderung für die Seite ausgewertet. In diesem Fall fungiert dieser Ausdruck als rWert-Ausdruck. Während einer Postback-Anforderung kann dieser Ausdruck verwendet werden, um den Wert der Eigenschaft name mit Benutzereingaben festzulegen. In diesem Fall fungiert der Ausdruck als lWert-Ausdruck.

Lesen Sie hier mehr: Wertausdrücke

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.