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.