2012-01-09 29 views
65

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

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

¿Hay alguna diferencia? ¿Qué son?

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

+5

posible duplicado de [Diferencia entre JSP EL, EL y JSF Unificado EL] (http://stackoverflow.com/questions/4812755/difference-between-jsp-el- jsf-el-y-unificado-el). Lo anterior también se menciona en nuestra página EL wiki (coloque el mouse sobre la etiqueta '[el]' debajo de la pregunta y haga clic en el enlace * info * en el popbox negro que se muestra). – BalusC

Respuesta

72

# {} son para expresiones diferidas (las expresiones diferidas se resuelven según el ciclo de vida de la página) y se pueden usar para leer o escribir desde o hacia un bean o 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. Puede leer más aquí: http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html

+0

@ fortunato: ¡gracias por tu respuesta! – Filippo1980

+0

explicado con precisión, buena respuesta – thodorisbais

7

¡Esa es una buena pregunta! Me enfrentado una vez y al igual que usted, tenía un montón de problemas para encontrar la respuesta ... hasta que me encontré con este pedazo de documentation:

Una característica clave del EL unificado es su soporte tanto 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.

+0

@ oscar lopez: ¡gracias! – Filippo1980

4

JSF EL utiliza una almohadilla (#) en el que el JSP EL utiliza signo de dólar ($) en jsf1.2 ambas sintaxis fueron unificadas

+0

puede proporcionar cierta documentación que admita esta unificación – dakait

+0

http://stackoverflow.com/questions/4812755/difference-between-jsp-el-jsf-el-and-unified-el http://www.artima.com/ lejava/articles/jsf_jspP.html –

+0

+1 para responder y proporcionar los enlaces – dakait

9

Una búsqueda en Google de "Java Server Faces libra dólar" dio el siguiente resultado, desde el lenguaje de expresión JBoss FAQ:

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

Para la especificación EL en sí, 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.

+1

@ jean hominal: gracias por su respuesta ... mientras escribía intenté buscar usando $ y # y no funcionó ... sin embargo ¡No sabía que llamabas a # "libra"! Así que gracias por esta información también! – Filippo1980

4

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

$ {} customer.name
# {} customer.name

El primero utiliza la sintaxis evaluación inmediata, mientras que la segunda usos diferidos sintaxis de evaluación . 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.

Leer más aquí: value expressions

Cuestiones relacionadas