JSF Expression Language [EL]
En la entrega anterior hablé un poco del Expression Language, sin entrar en mucho detalle. En la presente intentaré explayarme un poco más sobre el tema.
Con el Expression Language (Leguaje de expresión o EL) podemos acceder directamente a las propiedades o métodos de los beans desde el código de las páginas (JSP, XHTML, etc), sin más trámite que el siguiente:
#{nombreDelBean.propiedad}
Fácil, ¿no? Ahora vamos a profundizar un poco porque sino no tiene sentido hacer una nueva entrega del tutorial =D.
Empecemos describiendo las ventajas del EL
- Notación breve
- Acceso a colecciones. Ej: #{variable[indiceOKeyWord]}
- Acceso a datos de “request”. Ej: #{propertiesVar['nombre']} (accediendo a un archivo de propiedades previamente cargado en la página)
- Uso de operadores (aritméticos, lógicos, etc)
- Salida condicional. Ej: #{test ? opcion1 : opcion2}
- Conversión de tipos automática
- Valores vacíos en caso de String nulo
Para poder utilizar JSF EL es necesario un server que soporte JSP 2.0 (como Tomcat 5) o superior (servlet 2.4 al menos), lo cual nos lleva a tener un web.xml como el del código siguiente:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
version="2.4">
…
</web-app>
Accediendo a propiedades anidadas de un bean
En la entrega anterior vimos como se accedía a propiedades y métodos de los beans en el caso de que estos estén directamente declarados en el mismo bean (cabe aclarar que para poder acceder deben poseer sus respectivos getters y setters.) Ahora veremos como se accede a propiedades de objetos más complejos declarados en el bean (aunque no cambia mucho de la anterior.) Supongamos que en el managed bean tenemos un atributo del tipo Usuario, el cual posee a su vez dos atributos String, nombre y apellido; para obtener por ejemplo el nombre del atributo usuario de managedBean mediante EL, haríamos:
#{managedBean.usuario.nombre}
Esto hace que EL busque primero una variable o un managed bean, luego acceda a la propiedad “usuario” de éste, y por ultimo acceda la propiedad nombre desde allí (todo mediante los getters, ej: getUsuario). Así de fácil, prácticamente igual que acceder a una propiedad simple.
En el caso de que en vez de mostrar esta propiedad mediante, por ejemplo, un <h:ouputText />, queramos modificarla con un <h:inputText />, la forma de utilizar EL será la misma, simplemente lo colocaremos en el atributo value del tag. La diferencia radica en que JSF buscará un setter aparte del getter, a la hora de acceder a la propiedad (el getter en el momento de renderizar y el setter al hacer submit.)
Accediendo a colecciones
Acceder a colecciones utilizando EL es muy sencillo y utiliza la misma notación para varios tipos de colecciones, veamos un ejemplo:
#{managedBean.coleccion[index]}
ó
#{managedBean.coleccion[key]}
Esto funciona con:
Array: unArray[index]
List: unaLista.get(index) ó unaLista.add(index, valor)
Map: unMapa.get(key) ó unMapa.put(key, valor)
En el caso de los HashMap, una forma equivalente puede ser:
#{unHashMap.key}
Como pueden ver, la forma en que EL accede a las colecciones es muy fácil e intuitiva, como ya veníamos viendo.
El Expression Language de JSF tiene también variables predefinidas (objetos implícitos) al igual que JSP (son casi los mismos), pueden leer un poco más sobre eso siguiendo este link, y sobre el mismo tema pero en JSP (para ver que objetos existen) siguiendo este otro. Ambas páginas en inglés.
Operadores de EL
En caso de que sea necesario hacer comparaciones para tomar alguna decisión de renderizado, pueden utilizarse operadores en EL:
Aritméticos: + – * / div % mod
Relacionales: == eq != ne < lt > gt <= le >= ge
Lógicos: && and || or ! Not
Empty: empty es True para null, empty string, empty array, empty list, empty map. False en otro caso.
Puede utilizarse evaluacíon condicional de la forma #{test ? exp1 : exp2}, pero en estos casos generalmente es más recomendable recurrir a JSTL, que es más completo y funciona mejor.
Espero que les haya sido de utilidad esta entrega del Tutorial de JSF, que a pesar de las demoras entre artículo y artículo, seguiré publicando en la medida que pueda. No olviden dejar sus comentarios y dudas, me animan a seguir escribiendo!
This entry was posted on Thursday, August 14th, 2008 at 1:05 pm and is filed under Desarrollo Web, JSF, Tutoriales. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.



