unreachable resolved loginbean bindings jsf-2 el

jsf-2 - loginbean - target unreachable identifier resolved to null weblogic



¿Cuáles son las diferencias entre ${} y#{}? (5)

Estoy programando en JSF2 y netbeans crea muchas páginas con #{} que contiene una expresión.

Sin embargo, a veces en la web encontré ${} para lo mismo.

¿Hay alguna diferencia? ¿Qué son?

Google ignora los caracteres # y $ por lo que es difícil buscar.


# {} son para expresiones diferidas (las 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 para una resolución inmediata, tan pronto como se encuentran se resuelven. Ellos son de solo lectura. Puedes leer más aquí: http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html


¡Buena pregunta! Lo enfrenté una vez y, como usted, tuve muchos problemas para encontrar la respuesta ... hasta que me encontré con esta documentation :

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 procesa 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 usan la sintaxis $ {}, que se introdujo con el lenguaje de expresiones JSP 2.0. Las expresiones cuya evaluación se aplaza utilizan la sintaxis # {}, que se introdujo con la tecnología JavaServer Faces.


JSF EL usa un hash (#) donde JSP EL usa el signo de dólar ($) en jsf1.2 ambas sintaxis fueron unificadas


La documentación de Java da la siguiente explicación:

$ {customer.name}
#{Nombre del cliente}

El primero usa sintaxis de evaluación inmediata, mientras que el segundo usa sintaxis de evaluación diferida. La primera expresión accede a la propiedad name, obtiene su valor, agrega el valor a la respuesta y se representa en la página. Lo mismo puede suceder con la segunda expresión. Sin embargo, el manejador de etiquetas puede diferir la evaluación de esta expresión a un momento posterior en el ciclo de vida de la página, si la tecnología que usa esta etiqueta lo permite.

En el caso de la tecnología JavaServer Faces, la expresión de la última etiqueta se evalúa inmediatamente durante una solicitud inicial para la página. En este caso, esta expresión actúa como una expresión rvalue. Durante una solicitud de devolución, esta expresión se puede usar para establecer el valor de la propiedad del nombre con la entrada del usuario. En este caso, la expresión actúa como una expresión lvalue.

Lea más aquí: expresiones de valor


Una búsqueda en Google de "Java Server Faces Dollar Pound" dio el siguiente resultado, a partir de las Preguntas frecuentes sobre el lenguaje JBoss Expression:

¿Por qué algunas expresiones comienzan con libra y otras comienzan con signo de dólar?

Para la especificación EL en sí misma, no hay diferencia. Depende de la tecnología que usa el EL para decidir qué significa. Tanto para JSP como para JSF, las expresiones que comienzan con un signo de libra 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 solicitud. El signo de libra 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.