Expression Language & Eclipse warning: “items” doe

2019-03-22 15:19发布

问题:

i have the following JSP:

<%@ 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 warns me about every instance of EL Expressions in my code:

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

this is however not true, EL gets evaluated correctly by the server.

Can anyone hint me in the right direction why eclipse is warning me about those EL expressions?

回答1:

Your taglib directive imports a JSTL 1.0 taglib. It should be JSTL 1.1 instead (note the difference in URI):

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


回答2:

Possible solution (found here):

Twin Libraries

The JSTL tag libraries come in two versions which differ only in the way they support the use of runtime expressions for attribute values.

In the JSTL-RT tag library, expressions are specified in the page's scripting language. This is exactly how things currently work in current tag libraries.

In the JSTL-EL tag library, expressions are specified in the JSTL expression language. An expression is a String literal in the syntax of the EL.

When using the EL tag library you cannot pass a scripting language expression for the value of an attribute. This rule makes it possible to validate the syntax of an expression at translation time.

So maybe your eclipse and the server use different tag libraries.



回答3:

try this: change this:

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

to yes:

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

hope it works for you. I got this from www.csdn.net.