2010-08-20 8 views
25

Tengo el siguiente JSP:Expresión Lengua y Eclipse advertencia: "elementos" no admite expresiones de tiempo de ejecución

<%@ page contentType="text/html" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 
<%@ page isELIgnored="false"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title><c:out value="${it.title}"/></title> 
    </head> 
    <body> 
     <c:forEach var="speaker" items="${it.speakers}" varStatus="stat"> 
      <ul> 
       <li><c:out value="${speaker.person.firstName}" /> <c:out value="${speaker.person.lastName}" />, <c:out value="${speaker.person.address.city.zip}" /> <c:out value="${speaker.person.address.city.name}" /></li> 
      </ul> 
     </c:forEach> 
    </body> 
</html> 

Eclipse me advierte sobre todos los casos de El expresiones en mi código:

Warning [line 10]: "value" does not support runtime expressions 
Warning [line 13]: "items" does not support runtime expressions 
... 

sin embargo, esto no es cierto, EL es evaluado correctamente por el servidor.

¿Alguien me puede indicar en la dirección correcta por qué el eclipse me está advirtiendo acerca de esas expresiones EL?

Respuesta

53

Su directiva taglib importa un taglib JSTL 1.0. Debe ser JSTL 1.1 lugar (nótese la diferencia en URI):

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
+3

Y asegúrese de que web.xml se declare como al menos Servlet 2.4 – BalusC

+0

@BalusC Obtengo esta excepción y parece estar relacionada con su comentario: org.apache.jasper.JasperException: The absolute uri: http: // java.sun.com/jsp/jstl/core no se puede resolver ni en web.xml ni en los archivos jar implementados con esta aplicación – abbas

+0

¿Puede ayudarme con lo que debo hacer? – abbas

4

Posible solución (found here):

gemelas Bibliotecas

El JSTL bibliotecas de etiquetas vienen en dos versiones que se diferencian sólo en la forma que apoyan el uso de tiempo de ejecución expresiones para el atributo valores.

En la biblioteca de etiquetas JSTL-RT, las expresiones se especifican en el lenguaje de scripting de la página . Esto es exactamente cómo funcionan las cosas actualmente en bibliotecas de etiquetas actuales.

En la biblioteca de etiquetas JSTL-EL, las expresiones se especifican en el lenguaje de expresión JSTL . Una expresión es una cadena literal en la sintaxis del EL.

Cuando se utiliza la biblioteca de etiquetas EL que no se puede pasar de un lenguaje de script expresión para el valor de un atributo . Esta regla hace posible para validar la sintaxis de una expresión en el momento de la traducción.

Así que tal vez su eclipse y el servidor usan diferentes bibliotecas de etiquetas.

2

intente esto: cambiar esta situación:

<%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%> 

a sí:

<%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%> 

espero que funcione para usted . Obtuve esto de www.csdn.net.

+2

Esto no es en absoluto la solución ** correcta **. El URI propuesto es de la versión "prototipo" de JSTL. Debe actualizar a * al menos * JSTL 1.1. Ver también la respuesta de axtavt y http://stackoverflow.com/tags/jstl/info – BalusC

Cuestiones relacionadas