Estoy programando en JSF2 y NetBeans crea muchas páginas #{}
que contienen una expresión. ¡Sin embargo, a veces en la web encontré ${}
lo mismo!
¿Hay alguna diferencia? ¿Qué son?
#{}
son para expresiones diferidas (se resuelven dependiendo del ciclo de vida de la página) y se pueden usar para leer o escribir desde o hacia un bean o para realizar una llamada a un método .${}
son expresiones de resolución inmediata , tan pronto como se encuentran se resuelven. Son de solo lectura.Puede leer más aquí: http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html
Una búsqueda en Google de "Java Server Faces dollar pound" dio el siguiente resultado, de las preguntas frecuentes sobre el lenguaje de expresión JBoss :
¿Por qué algunas expresiones comienzan con libra y otras comienzan con el signo de dólar?
Para la especificación EL en sí, no hay diferencia. Depende de la tecnología que utilice el EL decidir qué significa. Tanto para JSP como para JSF, las expresiones que comienzan con un signo de almohadilla significan una evaluación diferida y un signo de dólar significa una evaluación inmediata . Todo esto tiene que ver con cuándo se evaluará realmente la expresión durante el procesamiento de la solicitud. El signo de almohadilla se usa en componentes JSF porque queremos que la expresión sea evaluada por el ciclo de vida JSF y no por el motor JSP o Facelets.
¡Buena pregunta! Lo enfrenté una vez y, como tú, tuve muchos problemas para encontrar la respuesta ... hasta que me topé con esta documentación :
fuente
JSF EL usa un hash (#) donde JSP EL usa el signo de dólar ($) en jsf1.2 ambas sintaxis estaban unificadas
fuente
La documentación de Java ofrece la siguiente explicación:
Leer más aquí: expresiones de valor
fuente