Solución:
-
#{}
son para expresiones diferidas (se resuelven en función del ciclo de vida de la página) y se pueden utilizar para leer o escribir desde o hacia un frijol o para hacer un llamada al método. -
${}
son expresiones para 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 utiliza el EL decidir qué significa. Tanto para JSP como para JSF, las expresiones que comienzan con un signo de almohadilla significan diferido evaluación y un signo de dólar significa inmediato evaluación. 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:
Una característica clave del EL unificado es su soporte para la evaluación inmediata y diferida de expresiones. La evaluación inmediata significa que el motor JSP evalúa la expresión y devuelve el resultado inmediatamente cuando la página se representa por primera vez. La evaluación diferida significa que la tecnología que utiliza el lenguaje de expresión puede emplear su propia maquinaria para evaluar la expresión en algún momento posterior durante el ciclo de vida de la página, siempre que sea apropiado hacerlo. Las expresiones que se evalúan inmediatamente utilizan la sintaxis $ {}, que se introdujo con el lenguaje de expresiones JSP 2.0. Las expresiones cuya evaluación se aplaza utilizan la sintaxis # {}, que fue introducida con la tecnología JavaServer Faces.