2010-08-20 13 views
25

ich stütze haben folgende JSP:Expression Language & Eclipse-Warnung: "Artikel" nicht Runtime Ausdrücke

<%@ 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> 

Eklipse warnt mich über jede Instanz von EL-Ausdrücke in meinem Code:

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

Dies ist jedoch nicht wahr, EL wird vom Server korrekt ausgewertet.

Kann mir jemand in die richtige Richtung sagen, warum Eclipse mich vor diesen EL-Ausdrücken warnt?

Antwort

53

Ihre Taglib-Anweisung importiert eine JSTL 1.0-Taglib. Es sollte sein JSTL 1.1 statt (man beachte den Unterschied in der URI):

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

Und stellen Sie sicher, dass web.xml als mindestens Servlet 2.4 deklariert wird. – BalusC

+0

@BalusC Ich bekomme diese Ausnahme und scheint mit Ihrem Kommentar verwandt zu sein: org.apache.jasper.JasperException: Die absolute URL: http: // java.sun.com/jsp/jstl/core kann weder in web.xml noch in den mit dieser Anwendung bereitgestellten JAR-Dateien aufgelöst werden. – abbas

+0

Können Sie mir helfen, was ich tun muss? – abbas

4

Mögliche Lösung (found here):

Twin Bibliotheken

Die JSTL-Tag-Bibliotheken in zwei Versionen kommen, die nur in der Art und Weise unterscheiden sie die Verwendung von Laufzeit Ausdrücke für Attribut unterstützen Werte.

In der JSTL-RT-Tag-Bibliothek sind Ausdrücke in der Skriptsprache angegeben. Dies ist genau, wie die Dinge derzeit in aktuellen Tag-Bibliotheken arbeiten.

In der JSTL-EL-Tag-Bibliothek werden Ausdrücke in der Ausdruckssprache JSTL angegeben. Ein Ausdruck ist ein String-Literal in der Syntax der EL.

Bei Verwendung der EL-Tag-Bibliothek können Sie keine Skriptsprache übergeben Ausdruck für den Wert eines Attributs. Diese Regel ermöglicht es , die Syntax eines Ausdrucks zur Übersetzungszeit zu validieren.

Vielleicht verwenden Ihre Eclipse und der Server verschiedene Tag-Bibliotheken.

2

versuchen Sie dies: Änderung dieser:

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

auf yes:

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

es für Sie arbeitet hoffen . Ich habe das von www.csdn.net.

+2

Dies ist absolut nicht die ** richtige ** Lösung. Der vorgeschlagene URI stammt aus der JSTL- "Prototyp" -Version. Sie sollten auf * mindestens * JSTL 1.1 upgraden. Siehe auch axtavts Antwort und http://stackoverflow.com/tags/jstl/info – BalusC

Verwandte Themen