P1C5 Lenguaje de Expresiones
-
Upload
aurelio-martin-obando-tavara -
Category
Education
-
view
2.138 -
download
1
description
Transcript of P1C5 Lenguaje de Expresiones
AGENDA- Accediendo a propiedades simples- Accediendo a propiedades embebidas- Enviando propiedades- Accediendo a colecciones- Resumen Clase 05
1
2 CONTENIDO
Punt
os P
rinci
pale
sEn facelets no soporta script JSP
De este modo, necesitamos una maneraEjemplos
#{employee.firstName}Invoca el método getFirstName() del bean administrado «employee» y lo muestra.
<h:inputText value=«#{employee.firstName}» />Cuando el formulario es mostrado, se invoca getFirstName()Cuando el formulario es enviado, valida si el valor es OK, pasa el valor a setFirstName(…)
#{employee.addresses[0].zip}Invoca el método getAddresses del bean administrado «employee» (el cual debería retornar un arreglo o una lista), luego toma el primer valor, luego invoca el método getZip() del primer valor y lo muestra.
Vent
ajas
del
Len
guaj
e de
Ex
pres
ione
s (M
uy Im
port
ante
)Notación corta para las propiedades del bean administrado
Para referenciar el resultado del método getCompanyName() del bean administrado «company», se usaría #{company.companyName}Para referenciar la propiedad firstName de la propiedad president del bean administrado «company», usaría #{company.president.firstName}
Acceso simple a los elementos de una colecciónPara referenciar un elemento de un arreglo, List o Map, se usaría #{someBean.array[indexOrKey]}
Vent
ajas
del
Len
guaj
e de
Ex
pres
ione
s (Im
port
ante
)Un set de operadores simples muy útil
Para manipular objetos dentro del Lenguaje de Expresiones, se puede usar cualquiera de muchos operadores aritméticos, relacionales, lógicos o empty-string que existen
Condicional de muestraExisten dos opciones para mostrar uno de muchos resultados
#{test ? option1 : option2}<h:outputText … rendered=«#{test}» />
Vent
ajas
del
Len
guaj
e de
Ex
pres
ione
s (N
o Ta
n Im
port
ante
)Variables predefinidas (objetos implícitos)
Para acceder a parámetros de request, cookies, HTTP headers y otros tipos de estándar de datos request, se pueden usar uno de los muchos objetos implícitos predefinidos.
Paso de argumentosLa versión 2.1 de EL permite el paso arbitrario de argumentos a los métodos. Funciona únicamente en los servidores Java EE 6.
«Mensajes vacíos» en vez de mensajes de errorEn la mayoría de los casos, valores nulos o NullPointerExceptions terminan como «mensajes vacíos» y no excepciones lanzadas.
EL JS
F vs
. EL
JSP
Feature JSF 2.0 EL JSF 1.x EL (with JSP) JSP 2.0 EL
Format #{blah}(immediate output values could be accessed with ${blah})
#{blah} ${blah}
Where used Anywhere in pageEg: #{customer.firstName}
Only in attributesof JSF tags. Eg:<h:outputText value="#{customer.firstName}"/>
Anywhere in pageEg: ${customer.firstName}
Represents Output data, later location for submitted data. Eg:<h:inputText value="#{customer.firstName}"/>
Outputdata, later location for submitted data. Eg:<h:inputText value="#{customer.firstName}"/>
Output data. Eg ${customer.firstName}
Where it looks for beans
Request, session, application (etc.) scopes and managed bean defs.
Request, session, application (etc.) scopes and managed bean defs.
Request, session, application scopes.
Declaration type
None needed for simplest usage. xlmns declaration for h:,ui:, f: tags.
@taglib None needed
Enviroments JavaEE 6 servers or servlet 2.5servers with JSF 2.0 JARs.
Java EE 5 servers or servlet 2.4 servers with JSF 1.x JARs.
Servlet 2.4+servers
Accediendo a propiedades simples
Prop
ieda
des
De
Bean
Ad
min
istr
ados
Sim
ples
Formato#{varName.propertyName}<h:outputText value=«#{varName.propertyName}» … />
Para JSF 2.0, la primera forma es usualmente la más usada, a menos que necesites otro atributo de <h:outputText (p.e. «rendered»)
InterpretaciónPrimero, busca varName
Buscar «varName» en todos los alcances definidos, desde el más específico hasta el más general (request, session, application, en este orden). Luego busca en las bean administrados definidos e instancia si lo encuentra.
Invoca getPropertyName y muestra el resultadoEsto debe ser un método de acceso normal sin paso de parámetros. Si se tratara de un boolean, el nombre del método podría ser isPropertyName.
Código Java «TestBean1.java»
Código Facelets «bean-properties.xhtml»
Resultado
Accediendo a propiedades embebidas
Prop
ieda
des
De
Bean
Ad
min
istr
ados
Em
bebi
das
Formato#{var.prop1.prop2.prop3}<h:outputText value=«#{var.prop1.prop2.prop3}» … />
InterpretaciónPrimero, busca var
Igual que en el caso anterior. Busca en los alcances existentes. Si lo encuentra, lo usa; si no lo encuentra busca en los beans administrados definidos e instancia.Invoca el método getProp1 del bean administrado.Invoca el método getProp2 del resultado getProp1.Invoca el método getProp3 del resultado getProp2.
Luego muestra este resultado.
Código Java «Name.java»
Código Java «Company.java»
Código Java «Employee.java»
Código Java «Employee1.java»
Código Facelets «nested-properties.xhtml»
Resultado
Enviando propiedades
Tres
uso
s de
l #{…
}Designar el valor a mostrar
#{employee.address} o <h:outputText value=«#{employee.address}» />Sin importar cuando se acceda, mostrará getAddress.
<h:inputText value=«#{employee.address}» />Cuando el formulario se muestra, invocará getAddress y pondrá el valor en el textfield mientras sea no-vacío.
Designar el valor a enviar<h:inputText value=«#{employee.address}» />
Cuando el formulario es enviado, designará donde se almacenará el valor. Pasa el valor del textfiel a setAddress.
Designar la llamada al método luego del envío del formulario
<h:commandButton value=«Submit» action=«#{employee.processEmployee}» />
Cuando el formulario es enviado, designa el manejador de la acción. Esto es el nombre exacto del método, no existe una abreviatura para ello.
Gett
er v
s. S
etter
Ejemplo<h:inputText value=«#{myBean.a.b.c.d}» />
Cuando el formulario es mostradoBuscar o instanciar myBean. Invoca getA. Invoca getB sobre el resultado. Invoca getC sobre aquel resultado. Invoca getD sobre el último resultado. If el valor es no-vacío lo pone en el valor del textfield.
Cuando el formulario es enviadoBuscar myBean (instancia una nueva version si se está en RequestSession). Invoca getA. Invoca getB sobre el resultado. Invoca getC sobre aquel resultado. Luego pasa el valor del textfiel al método setD del último resultado.
Punto: solamente el último realiza el seteo en un submission.Se asume que el valor pasa la etapa de validación.
Código Java «Employee.java»
Código Facelets «submitting-properties.xhtml»
Resultado
Código Facelets «accepted.xhtml»
Código Facelets «rejected.xhtml»
Resultado
Accediendo a colecciones
Equi
vale
ncia
del
«pu
nto»
y la
s no
taci
ones
de
arre
glos
Formas equivalentes#{name.property}
Válido si «property» fuera un nombre de variable Java legal.#{name[«property»]}
Razones para usar la notación de corchetesPara acceder a arreglos, listas y otras colecciones.
Ver siguientes diapositivasPara calcular el nombre de la propiedad en tiempo de ejecución.
#{name1[name2]} (sin comillas sobre name2)Para usar nombres que son ilegales como nombres de variable Java.
#{foo[«bar-baz»]}#{foo[«bar.baz»]}
#{att
ribut
eNam
e[en
tryN
ame]
}Funciona para…
Arreglo. Equivalente atheArray[index] (getting y setting)
Lista. Equivalente a theList.get(index) o theList.set(index, submittedVal)
Mapa. Equivalente atheMap.get(key) or theMap.put(key, submittedVal)
Formas equivalentes{stateCapitals[«maryland»]}{stateCapitals.maryland}No se puede usar esto para las listas (los números no son nombres de variable Java legales, entonces #{listVar.2} es ilegal). Y no todas las claves de la tabla hash son nombres de variable legales.
Código Java «Purchases.java»
Código Java «Purchases.java» (Cont.)
Código Java «Utils.java»
using-collections.xhtml
Este ejemplo usa indices explícitos.
using-collections.xhtml
using-collections.xhtml
Debido a que se usan comillas dobles alrededors de la clave del Mapa es que se debe usar comillas simples aquí.
Resultado
Resultado
3 Resumen
» Mostrando propiedades de beans administrados» #{customer.company.name}» <h:outputText value=“#{customer.company.name}” />
» Textfields» <h:inputText value=“#{customer.firstName}” />
» Cuando el fomulario es mostrado por primera vez, invoca getFirstName.» Cuando el formulario es enviado, pasa el valor a setFirstName.
» Colecciones» #{customer.addresses[0].zip}
» Invoca getAddresses, luego la dirección en la ubicación 0 e invoca el getZip.
PUNTOS PRINCIPALES
GRACIAS
O también puedes encontrarla
en .
Saludos!
AULA VIRTUALEncuentra esta presentación en el