P1C5 Lenguaje de Expresiones

45
Aurelio Martín Obando Távara [email protected] proyectos i LENGUAJE DE EXPRESIONES

description

Esta presentación les ayudará a entender como JSF 2.0 interpreta el len

Transcript of P1C5 Lenguaje de Expresiones

Page 1: P1C5 Lenguaje de Expresiones

Aurelio Martín Obando Tá[email protected]

proyectos i

LENGUAJE DE EXPRESIONES

Page 2: P1C5 Lenguaje de Expresiones

AGENDA- Accediendo a propiedades simples- Accediendo a propiedades embebidas- Enviando propiedades- Accediendo a colecciones- Resumen Clase 05

1

Page 3: P1C5 Lenguaje de Expresiones

2 CONTENIDO

Page 4: P1C5 Lenguaje de Expresiones

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.

Page 5: P1C5 Lenguaje de Expresiones

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]}

Page 6: P1C5 Lenguaje de Expresiones

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}» />

Page 7: P1C5 Lenguaje de Expresiones

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.

Page 8: P1C5 Lenguaje de Expresiones

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

Page 9: P1C5 Lenguaje de Expresiones

Accediendo a propiedades simples

Page 10: P1C5 Lenguaje de Expresiones

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.

Page 11: P1C5 Lenguaje de Expresiones

Código Java «TestBean1.java»

Page 12: P1C5 Lenguaje de Expresiones

Código Facelets «bean-properties.xhtml»

Page 13: P1C5 Lenguaje de Expresiones

Resultado

Page 14: P1C5 Lenguaje de Expresiones

Accediendo a propiedades embebidas

Page 15: P1C5 Lenguaje de Expresiones

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.

Page 16: P1C5 Lenguaje de Expresiones

Código Java «Name.java»

Page 17: P1C5 Lenguaje de Expresiones

Código Java «Company.java»

Page 18: P1C5 Lenguaje de Expresiones

Código Java «Employee.java»

Page 19: P1C5 Lenguaje de Expresiones

Código Java «Employee1.java»

Page 20: P1C5 Lenguaje de Expresiones

Código Facelets «nested-properties.xhtml»

Page 21: P1C5 Lenguaje de Expresiones

Resultado

Page 22: P1C5 Lenguaje de Expresiones

Enviando propiedades

Page 23: P1C5 Lenguaje de Expresiones

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.

Page 24: P1C5 Lenguaje de Expresiones

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.

Page 25: P1C5 Lenguaje de Expresiones

Código Java «Employee.java»

Page 26: P1C5 Lenguaje de Expresiones

Código Facelets «submitting-properties.xhtml»

Page 27: P1C5 Lenguaje de Expresiones

Resultado

Page 28: P1C5 Lenguaje de Expresiones

Código Facelets «accepted.xhtml»

Page 29: P1C5 Lenguaje de Expresiones

Código Facelets «rejected.xhtml»

Page 30: P1C5 Lenguaje de Expresiones

Resultado

Page 31: P1C5 Lenguaje de Expresiones

Accediendo a colecciones

Page 32: P1C5 Lenguaje de Expresiones

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»]}

Page 33: P1C5 Lenguaje de Expresiones

#{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.

Page 34: P1C5 Lenguaje de Expresiones

Código Java «Purchases.java»

Page 35: P1C5 Lenguaje de Expresiones

Código Java «Purchases.java» (Cont.)

Page 36: P1C5 Lenguaje de Expresiones

Código Java «Utils.java»

Page 37: P1C5 Lenguaje de Expresiones

using-collections.xhtml

Este ejemplo usa indices explícitos.

Page 38: P1C5 Lenguaje de Expresiones

using-collections.xhtml

Page 39: P1C5 Lenguaje de Expresiones

using-collections.xhtml

Debido a que se usan comillas dobles alrededors de la clave del Mapa es que se debe usar comillas simples aquí.

Page 40: P1C5 Lenguaje de Expresiones

Resultado

Page 41: P1C5 Lenguaje de Expresiones

Resultado

Page 42: P1C5 Lenguaje de Expresiones

3 Resumen

Page 43: P1C5 Lenguaje de Expresiones

» 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

Page 44: P1C5 Lenguaje de Expresiones

GRACIAS

Page 45: P1C5 Lenguaje de Expresiones

O también puedes encontrarla

en .

Saludos!

AULA VIRTUALEncuentra esta presentación en el