java - fmt - JSP: expresión EL no se evalúa
taglib java (9)
Esta pregunta ya tiene una respuesta aquí:
- Expresiones EL no evaluadas en JSP 2 respuestas
Tengo una página JSP ejecutándose en Tomcat 5.5. Tengo el siguiente código:
<c:forEach var="i" begin="1" end="10" step="1">
<c:out value="${i}" />
<br />
</c:forEach>
El resultado que obtengo es:
${i}
${i}
${i}
${i}
${i}
${i}
${i}
${i}
${i}
${i}
No puedo entender por qué el ciclo forEach está funcionando pero la salida no funciona. Cualquier ayuda que alguien pueda dar sería genial.
Asegúrese de incluir los espacios de nombres relevantes en web.xml. Solo intenta reemplazar
<web-app>
con algo así como
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
Lo arregló para mí. Puede encontrar los espacios de nombres correctos para su instancia de Tomcat en las aplicaciones de ejemplo que vienen con una instalación de Tomcat.
Desde el controlador:
@RequestMapping(value = "createcustomer",method = RequestMethod.GET)
public String customer(Model model)
{
Customer cus=new Customer();
cus.setCustomerNumber("Test");
model.addAttribute("customer",cus);
return "createcustomer";
}
En vista:
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<div class="cl">
<form:form commandName="customer" method="POST">
<p>Name: <c:out value="${customer.CustomerNumber}"></c:out></p>
</form:form>
<div>
Salida:
Name: Test
Es el encabezado en web.xml que causa el problema
Debajo del encabezado generado maven se detiene a EL de ser evaluado.
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
Usando el encabezado de abajo eval''s el EL.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
Para aquellos interesados, la sintaxis XML equivalente para JSP 2.0 es:
<jsp:directive.page isELIgnored="false"/>
Sé que se supone que está activado de manera predeterminada, pero ahora me encuentro con páginas (o incluso la misma página que cambia el comportamiento) donde el procesamiento de EL no se produce. Agregar lo siguiente a la parte superior de tales páginas debería resolver el problema:
<%@ page isELIgnored="false" %>
Lo agrego a cada página porque no duele, y todavía no sé la causa raíz que ocasionalmente hace que una página deje de interpretar las expresiones EL.
Simplemente tuve el mismo problema y pasé una eternidad tratando de descubrir qué sucedía.
He desarrollado muchas aplicaciones web desde cero. ¿Por qué de repente no cooperaba?
Una diferencia fue esta vez que utilicé el arquetipo de aplicación de maven para generar la estructura del proyecto. Creó un archivo web.xml que se veía así:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
Una vez que me di cuenta que como mi problema, estaba seguro de tener la respuesta. Así que copié uno de mis 2.5 encabezados web.xml, reconstruí y rediseñé. Sin cigarro. No podía creer que ese no fuera el problema. Limpiar el proyecto, reinició Tomcat. Nop.
La respuesta de RHSeeger me llevó a tratar de poner en la <% @ page isELIgnored = "false"%>. Eso resolvió el problema. Pero aún quería saber por qué el comenzó a ser ignorado, para empezar.
Pensé que se ignoraba el elemento debido a un problema con mi web.xml, por lo que lo inspeccioné de cerca en comparación con el otro web.xml de otra aplicación que sabía que funcionaba bien. Sin diferencias notables.
Luego eliminé el <% @ page isELIgnored = "false"%> de mi JSP, y volví a desplegarlo, suponiendo que el el no se volvería a evaluar, pero para mi sorpresa, ¡el el fue evaluado correctamente!
Entonces, supongo que debe ser algún tipo de problema de almacenamiento en caché, deshice mis cambios al web.xml para volver a crear el problema. Volví a redistribuir, pero aún así, el sistema estaba siendo evaluado correctamente, incluso con el mal web.xml. Luego limpié todo el proyecto (estoy usando una implementación explosionada), volando el directorio explotado y recreándolo. Luego reinicié Tomcat. Aún así, parece que el evaluó correctamente a pesar del mal web.xml.
Finalmente me di cuenta. Simplemente agregué un espacio en algún lugar del JSP, lo reenvasé y actualicé la página. ¡Bingo! Ahora el EL no estaba siendo evaluado.
Entonces el problema fue con el web.xml. Se complicaría aún más por el hecho de que las JSP no se estaban recompilando a menos que hubieran cambiado. No estoy seguro de si tomcat usa una suma MD5 para decidir si las JSP necesitan ser recompiladas o qué. Otra posibilidad es que estoy usando tiles, que sé que tiene un mecanismo de caché, pero no esperaría que sobreviva un reinicio de tomcat.
De todos modos, a menos que modifiques tus JSP DESPUÉS de arreglar el web.xml, todas las apuestas están desactivadas en cuanto a si EL comenzará a funcionar nuevamente. Espero que esto le ahorre a alguien más un dolor de cabeza. También me interesa si alguien puede decirme si fue Tomcat no recompilando las JSP o las teselas almacenando en caché la salida de la JSP. Estoy bastante seguro de que es la recompilación, porque en el momento de la compilación es cuando el JSP debería tener que averiguar qué hacer con las expresiones $ {} el, ¿no? Los tiles no pueden almacenar en caché lo que se sustituye en las expresiones de el, de lo contrario surgirían todo tipo de problemas.
Use tomcat6. No requiere ninguna configuración para EL en web.xml.
Ver mi respuesta en Javascript String.replace (/ / $ /, str) funciona extrañamente en el archivo jsp por posibles razones.
Respuesta más larga: $ {i} es expresión en el llamado ''Lenguaje de Expresión''. Algunas veces, el Lenguaje de Expresión puede ser deshabilitado. Consulte la respuesta anterior por motivos potenciales y formas de habilitarla.
tuve un problema similar al de Kevin, utilicé maven para comenzar con la aplicación web pero no me gustó evaluar expresiones en jsp - tuve que eliminar el encabezado DOCTYPE - todo está bien ahora sin jugar con bit isELIgnored - maven genera web.xml que enlaza con 2.3 que como dijo Peter ha desactivado EL por defecto