web-dev-qa-db-fra.com

Quelles sont les différences entre $ {} et # {}?

Je programme en JSF2 et NetBeans crée de nombreuses pages avec #{} qui contient une expression. Cependant, parfois sur le Web, j'ai trouvé ${} pour la même chose!

Y a-t-il des différences? Que sont-ils?

73
Filippo1980
  • #{} sont pour expressions différées (elles sont résolues en fonction du cycle de vie de la page) et peuvent être utilisées pour lire ou écrire depuis ou vers un bean ou pour faire un appel de méthode.
  • ${} sont des expressions pour résolution immédiate, dès qu'elles sont rencontrées, elles sont résolues. Ils sont en lecture seule.

Vous pouvez en savoir plus ici: http://docs.Oracle.com/javaee/6/tutorial/doc/bnahr.html

85
Fortunato

Une recherche google pour "Java Server Faces dollar pound" a donné le résultat suivant, à partir du JBoss Expression Language FAQ :

Pourquoi certaines expressions commencent par la livre et d'autres commencent par le signe dollar?

Pour la spécification EL elle-même, il n'y a pas de différence. C'est à la technologie qui utilise l'EL de décider ce que cela signifie. Pour JSP et JSF, les expressions qui commencent par un signe dièse signifient différé évaluation et un signe dollar signifie immédiat évaluation. Tout cela a à voir avec lorsque l'expression sera réellement évaluée pendant le traitement de la demande. Le signe dièse est utilisé dans les composants JSF car nous voulons que l'expression soit évaluée par le cycle de vie JSF et non par le moteur JSP ou Facelets.

11
Jean Hominal

C'est une bonne question! J'ai fait face une fois et comme vous, j'ai eu beaucoup de mal à trouver la réponse ... jusqu'à ce que je tombe sur ce morceau de documentation :

Une caractéristique clé de l'EL unifié est sa prise en charge de l'évaluation immédiate et différée des expressions. Une évaluation immédiate signifie que le moteur JSP évalue l'expression et renvoie le résultat immédiatement lors du premier rendu de la page. Une évaluation différée signifie que la technologie utilisant le langage d'expression peut utiliser sa propre machine pour évaluer l'expression un peu plus tard au cours du cycle de vie de la page, chaque fois que cela est approprié. Les expressions évaluées utilisent immédiatement la syntaxe $ {}, introduite avec le langage d'expression JSP 2.0. Les expressions dont l'évaluation est différée utilisent la syntaxe # {}, introduite avec la technologie JavaServer Faces.

9
Óscar López

La documentation Java donne l'explication suivante:

$ {customer.name}
# {client.nom}

La première utilise la syntaxe d'évaluation immédiate, tandis que la seconde utilise la syntaxe d'évaluation différée. La première expression accède à la propriété name, obtient sa valeur, ajoute la valeur à la réponse et est rendue sur la page. La même chose peut se produire avec la deuxième expression. Cependant, le gestionnaire de balises peut reporter l'évaluation de cette expression à une date ultérieure dans le cycle de vie de la page, si la technologie utilisant cette balise le permet.

Dans le cas de la technologie JavaServer Faces, l'expression de cette dernière balise est évaluée immédiatement lors d'une première demande de page. Dans ce cas, cette expression agit comme une expression rvalue. Lors d'une demande de publication, cette expression peut être utilisée pour définir la valeur de la propriété name avec une entrée utilisateur. Dans ce cas, l'expression agit comme une expression lvalue.

En savoir plus ici: expressions de valeur

5
Chris

JSF EL utilise un hachage (#) où JSP EL utilise le signe dollar ($) dans jsf1.2 les deux syntaxes ont été unifiées

4
dov.amir