webentwicklung-frage-antwort-db.com.de

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

Ich programmiere in JSF2 und NetBeans erstellt viele Seiten mit #{}, das einen Ausdruck enthält. Jedoch fand ich manchmal im Web ${} für die gleiche Sache!

Gibt es da unterschiede Was sind Sie?

73
Filippo1980
  • #{} sind für verzögerte Ausdrücke (sie werden abhängig vom Lebenszyklus der Seite aufgelöst) und können verwendet werden lesen oder schreiben von oder nach bean oder method call.
  • ${} sind Ausdrücke für sofortige Auflö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

85
Fortunato

Eine Google-Suche nach "Java Server Faces Dollar Pound" ergab das folgende Ergebnis, aus dem JBoss Expression Language FAQ :

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, mit der der EL entscheidet, was er bedeutet. Sowohl für JSP als auch für JSF bedeuten Ausdrücke, die mit einem Pfundzeichen beginnen, verzögert und ein Dollarzeichen sofort. Dies hat alles mit zu tun, wenn 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.

11
Jean Hominal

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

Ein Hauptmerkmal der einheitlichen EL ist die Unterstützung sowohl für die sofortige als auch für die verzögerte Auswertung von Ausdrücken. Sofortige Auswertung bedeutet, dass die JSP-Engine den Ausdruck auswertet und das Ergebnis sofort beim ersten Rendern der Seite zurückgibt. Verzögerte Auswertung bedeutet, dass die Technologie, die die Ausdruckssprache verwendet, ihre eigene Maschinerie verwenden kann, um den Ausdruck zu einem späteren Zeitpunkt während des Lebenszyklus der Seite auszuwerten, wann immer dies angemessen ist. Diese Ausdrücke, die sofort ausgewertet werden, verwenden die Syntax $ {}, die mit der Ausdruckssprache JSP 2.0 eingeführt wurde. Ausdrücke, deren Auswertung zurückgestellt wird, verwenden die Syntax # {}, die mit der JavaServer Faces-Technologie eingeführt wurde.

9
Óscar López

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

$ {customer.name}
#{Kundenname}

Ersteres verwendet die sofortige Auswertungssyntax, während letzteres die verzögerte Auswertungssyntax verwendet. Der erste Ausdruck greift auf die Eigenschaft name zu, ruft seinen Wert ab, fügt den Wert der 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 ein R-Wert-Ausdruck. Während einer Postback-Anforderung kann dieser Ausdruck verwendet werden, um den Wert der Eigenschaft name mithilfe von Benutzereingaben festzulegen. In diesem Fall fungiert der Ausdruck als ein Wertausdruck.

Lesen Sie hier mehr: Werteausdrücke

5
Chris

JSF EL verwendet einen Hash (#), wobei JSP EL in jsf1.2 das Dollarzeichen ($) verwendet. Beide Syntaxen wurden vereinheitlicht

4
dov.amir