English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Lenguaje de expresión de JSP

El lenguaje de expresión de JSP (EL) facilita enormemente el acceso a los datos almacenados en JavaBean. JSP EL se puede usar tanto para crear expresiones aritméticas como para expresiones lógicas. Dentro de una expresión de JSP EL se pueden usar números enteros, números de punto flotante, cadenas, constantes true, false, y null.

Una sintaxis simple

típicamente, cuando necesita especificar un valor de propiedad en una etiqueta JSP, simplemente utilice una cadena:

<jsp:setProperty name="box" property="perimeter" value="100"/>

JSP EL le permite especificar una expresión para representar el valor de la propiedad. La sintaxis de una expresión simple es la siguiente:

${expr}

Donde expr es la expresión. En JSP EL, los operadores comunes son . y {}. Estos operadores le permiten acceder a las propiedades de los JavaBean a través de objetos JSP incrustados.

Por ejemplo, el etiqueta <jsp:setProperty> de arriba se puede rewritten en la siguiente forma utilizando el lenguaje de expresión:

<jsp:setProperty name="box" property="perimeter" 
                 value="${2*box.width+2*box.height"/>

Cuando el compilador de JSP ve el formato "${" en las propiedades, genera código para calcular esta expresión y produce un sustituto para el valor de la expresión.

También se puede usar el lenguaje de expresiones en el texto del patrón de la etiqueta. Por ejemplo, la etiqueta <jsp:text> simplemente inserta el texto de su cuerpo en la salida de JSP:}

<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>

Ahora, use expresiones en el cuerpo de la etiqueta <jsp:text>, como así:

<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>

Se pueden usar paréntesis redondos en expresiones EL para organizar subexpresiones. Por ejemplo, ${(1 + 2) * 3=9,pero ${1 + (2 * 3=7.

Para deshabilitar la evaluación de expresiones EL, debe usar la instrucción page para establecer el valor de la propiedad isELIgnored en true:

<%@ page isELIgnored="true|false" %>

De esta manera, la expresión EL se ignorará. Si se establece en false, el contenedor calculará la expresión EL.

Operadores básicos en EL

EL expresiones soportan la mayoría de los operadores aritméticos y lógicos proporcionados por Java:

OperadorDescripción
. Acceder a una propiedad de Bean o una entrada de mapeo
[] Acceder a un elemento de un array o una lista enlazada
( ) Organizar una subexpresión para cambiar la prioridad
+ Suma
- Resta o negativo
* Multiplicación
/ or div División
% or mod Módulo
== or eq Prueba si es igual
!= or ne Prueba si es distinto de
< or lt Prueba si es menor que
> or gt Prueba si es mayor que
<= or le Prueba si es menor o igual que
>= or ge Prueba si es mayor o igual que
&& or and Prueba la lógica y
|| or or Prueba la lógica o
! or not Prueba el inverso
empty Prueba si es un valor nulo

Funciones en JSP EL

JSP EL le permite usar funciones en expresiones. Estas funciones deben estar definidas en bibliotecas de etiquetas personalizadas. La sintaxis de uso de las funciones es la siguiente:

${ns:func(param1, param2, ...)}

ns se refiere al espacio de nombres (namespace), func se refiere al nombre de la función, param1Se refiere al primer parámetro, param2Se refiere al segundo parámetro, etc. Por ejemplo, hay una función fn:length, definida en la biblioteca JSTL, que se puede usar de la siguiente manera para obtener la longitud de una cadena:

${fn:length("Get my length")}

Para usar las funciones de cualquier biblioteca de etiquetas, debe instalar estas bibliotecas en el servidor y luego incluir estas bibliotecas en el archivo JSP utilizando la etiqueta <taglib>.

Objetos implícitos de JSP EL

JSP EL admite los objetos implícitos enumerados a continuación:

Objetos implícitosDescripción
pageScope Ámbito de página
requestScope Ámbito de solicitud
sessionScope Ámbito de sesión
applicationScope Ámbito de aplicación
param Parámetros del objeto Request, cadena
paramValues Parámetros del objeto Request, conjunto de cadenas
header Encabezados de información HTTP, cadena
headerValues Encabezados de información HTTP, conjunto de cadenas
initParam Parámetros de inicialización de contexto
cookie Valor de Cookie
pageContext El pageContext de la página actual

Puede usar estos objetos en las expresiones, al igual que las variables. A continuación, se proporcionarán algunos ejemplos para comprender mejor este concepto.

Objeto pageContext

El objeto pageContext es una referencia al objeto pageContext en JSP. A través del objeto pageContext, puede acceder al objeto request. Por ejemplo, para acceder a la cadena de consulta transmitida por el objeto request, puede hacerlo de la siguiente manera:

${pageContext.request.queryString}

Objeto Scope

Las variables pageScope, requestScope, sessionScope y applicationScope se utilizan para acceder a las variables almacenadas en diferentes capas de ámbito.

Por ejemplo, si necesita acceder explícitamente a la variable box en la capa applicationScope, puede hacerlo de la siguiente manera: applicationScope.box.

Objetos param y paramValues

Los objetos param y paramValues se utilizan para acceder a los valores de los parámetros, mediante los métodos request.getParameter y request.getParameterValues.

Por ejemplo, para acceder a un parámetro llamado order, se puede usar la expresión: ${param.order} o ${param["order"]}.

El siguiente ejemplo muestra cómo acceder al parámetro username en el objeto request:

<%@ page import="java.io.*,java.util.*" %>
<%
    String title = "Accediendo a Parámetros de Solicitud";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${param["username"]}</p>
</div>
</body>
</html>

El objeto param devuelve una cadena única, mientras que el objeto paramValues devuelve un array de cadenas.

Los objetos header y headerValues

Los objetos header y headerValues se utilizan para acceder a los encabezados de información, mediante el uso de los métodos request.getHeader y request.getHeaders.

Por ejemplo, para acceder a un nombre llamado user-La información de encabezado de agente se puede usar de la siguiente manera: ${header.user-agent},o ${header["user-agent"]}。

El siguiente ejemplo muestra cómo acceder a user-Información de encabezado de agente:

<%@ page import="java.io.*,java.util.*" %>
<%
    String title = "User Agent Example";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${header["user-agent"]}</p>
</div>
</body>
</html>

El resultado de la ejecución es el siguiente:

El objeto header devuelve un valor único, mientras que headerValues devuelve un array de cadenas de caracteres.