4. En facelets no soporta script JSP De este modo, necesitamos una manera Ejemplos #{employee.firstName} Invoca el método getFirstName() del bean administrado «employee» y lo muestra. <h:inputTextvalue=«#{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. PuntosPrincipales
5. 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ón Para referenciar un elemento de un arreglo, List o Map, se usaría #{someBean.array[indexOrKey]} Ventajas del Lenguaje de Expresiones (Muy Importante)
6. 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 muestra Existen dos opciones para mostrar uno de muchos resultados #{test ? option1 : option2} <h:outputText … rendered=«#{test}» /> Ventajas del Lenguaje de Expresiones (Importante)
7. 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 argumentos La 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 error En la mayoría de los casos, valores nulos o NullPointerExceptions terminan como «mensajes vacíos» y no excepciones lanzadas. Ventajas del Lenguaje de Expresiones (No Tan Importante)
10. 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ón Primero, 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 resultado Esto 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. Propiedades De Bean Administrados Simples
15. Formato #{var.prop1.prop2.prop3} <h:outputText value=«#{var.prop1.prop2.prop3}» … /> Interpretación Primero, 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. Propiedades De Bean Administrados Embebidas
23. Designar el valor a mostrar #{employee.address} o <h:outputText value=«#{employee.address}» /> Sin importar cuando se acceda, mostrará getAddress. <h:inputTextvalue=«#{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:inputTextvalue=«#{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:commandButtonvalue=«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. Tres usos del #{…}
24. Ejemplo <h:inputTextvalue=«#{myBean.a.b.c.d}» /> Cuando el formulario es mostrado Buscar 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 enviado Buscar 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. Getter vs. Setter
32. Formas equivalentes #{name.property} Válido si «property» fuera un nombre de variable Java legal. #{name[«property»]} Razones para usar la notación de corchetes Para acceder a arreglos, listas y otras colecciones. Ver siguientes diapositivas Para 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»]} Equivalencia del «punto» y las notaciones de arreglos
33. Funciona para… Arreglo. Equivalente a theArray[index] (getting y setting) Lista. Equivalente a theList.get(index) o theList.set(index, submittedVal) Mapa. Equivalente a theMap.get(key) ortheMap.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. #{attributeName[entryName]}