II.4 El lenguaje EL (Expression Languaje)
El Java Expression Languaje (EL) es un mecanismo compacto y muy poderoso para establecer la comunicación entre las páginas web y los Java beans. Con EL se pueden enviar los datos proporcionados por el usuario en una página web a la lógica de la aplicación (en un HTTP request), y también se pueden mostrar al usuario los datos procesados (en un HTTP response). Las expresiones en lenguaje EL se codifican en las páginas JSP, JSF, facelets y en archivos XML. En este curso aprenderemos algunas de las instrucciones EL más utilizadas. Para una referencia completa de EL se puede consultar el documento de especificación de EL en:
http://download.oracle.com/otndocs/jcp/el-3_0-fr-eval-spec/index.html
Las expresiones de valor (value expressions), son probablemente las expresiones EL más utilizadas porque
son las que se utilizan para hacer referencia a los métodos y los atributos de un objeto o de un managed
bean. EL proporciona un conjunto de objetos implícitos que sirven para obtener valores de parámetros y
atributos de diferentes ámbitos. Con las value expressions se pueden acceder fácilmente los métodos y
atributos de un Java Bean, las colecciones y los datos de tipo enum.
Existen dos tipos de value expressions:
- rvalue.- Son aquellas que pueden leer los datos, pero no pueden sobreescribirlos. Se encierran entre llaves, precedidas por el carácter $, es decir, tienen la sintaxis: ${ }
- lvalue.- Son las que pueden leer y escribir en los datos. Se encierran entre llaves, precedidas por el carácter #, es decir, tienen la sintaxis: #{ }
Así, para acceder al atributo de un bean, se usa la notación punto:
#{nombreBean.atributoBean}
Y para acceder al método de un bean, los paréntesis son obligatorios solo cuando el método recibe parámetros:
#{nombreBean.metodoBean} // Cuando no tiene parámetros
#{nombreBean.metodoBean(…, …,…)} // Cuando tiene parámetros
Nótese que se utilizó letra minúscula en nombreBean, esto se debe a que JSF instancia automáticamente un objeto de la clase NombreBean, y cuando se desea acceder a un atributo del bean con EL hay que usar el objeto, no la clase.