P1C5 Lenguaje de Expresiones

Post on 28-Jun-2015

2.138 views 1 download

description

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

Transcript of P1C5 Lenguaje de Expresiones

Aurelio Martín Obando Távaraaot@upnorte.edu.pe

proyectos i

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