2009-12-04 8 views
11

He leído hace algún tiempo acerca de la diferencia en 'Core JSF', pero ahora no puedo encontrar ese lugar.

Sin embargo, no recuerdo que hubo una palabra sobre casos en los que deberíamos usar $ {expr} en jsf. Entonces, solo tengo curiosidad por saber cuál es la diferencia (en una castaña) y si hay un caso para usar $ {expr} en la aplicación JSF.

Respuesta

23

de resumir en un lenguaje claro: ${expression} hace solamente obtener, mientras #{expression} puede hacer ambas cosas obtener y conjunto. Esto se debe a que el ${expression} se evalúa solo una vez (inmediato), mientras que el #{expression} se evalúa en cada acceso (diferido).

En JSF en JSP 2.0 o Facelets 1.x, cuando se pone algo así como la primera expresión de la página

${bean.property} 

donde bean es una petición en ámbito bean gestionado, verá nada . Pero si bean es un bean administrado con ámbito de sesión y ya se ha creado antes, verá el valor de la propiedad que se imprime. Esto también se aplica si el bean administrado con ámbito de solicitud se crea antes en #{bean.xxx} en la misma página.

Si en lugar de hacerlo como primera expresión de la página

#{bean.property} 

entonces EL comprobará si bean es nulo y si es así, entonces será establecer (crear) una nueva. Si la propiedad se establece durante la construcción del bean, verá que esta expresión muestra la propiedad.

Todo esto es obligatorio para obtener entre otros componentes JSF UIInput como <h:inputText> para funcionar. Cuando envíe el formulario, #{expression}establecerá los valores en el bean.

8

De JavaEE tutorial:

Todas las expresiones que utilizan la sintaxis $ {} son evaluados inmediatamente. Estas expresiones solo se pueden usar dentro del texto de la plantilla o como el valor de un atributo de etiqueta JSP que puede aceptar expresiones en tiempo de ejecución. [...] Las expresiones de evaluación inmediata son siempre expresiones de valor de solo lectura. La expresión que se muestra arriba solo puede obtener el precio total del bean de carrito; no puede establecer el precio total.
Las expresiones de evaluación diferida adoptan la forma # {expr} y se pueden evaluar en otras fases del ciclo de vida de una página tal como se define mediante cualquier tecnología que utilice la expresión. En el caso de la tecnología JavaServer Faces, su controlador puede evaluar la expresión en diferentes fases del ciclo de vida dependiendo de cómo se usa la expresión en la página.
Cuestiones relacionadas