Язык выражений и предупреждение Eclipse: «items» не поддерживает выражения времени выполнения - PullRequest
27 голосов
/ 20 августа 2010

у меня есть следующий 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 предупреждает меня о каждом экземпляре выражений EL в моем коде:

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

однако это не так, EL оценивается правильносервером.

Может кто-нибудь намекнуть мне в правильном направлении, почему Eclipse предупреждает меня об этих выражениях EL?

Ответы [ 3 ]

56 голосов
/ 20 августа 2010

Ваша директива taglib импортирует тег tag JLL 1.0. Это должен быть JSTL 1.1 вместо этого (обратите внимание на разницу в URI):

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
4 голосов
/ 20 августа 2010

Возможное решение ( найдено здесь ):

Библиотеки-близнецы

Библиотеки тегов JSTL представлены в двух версиях, которые отличаются толькоони поддерживают использование выражений времени выполнения для значений атрибутов.

В библиотеке тегов JSTL-RT выражения указываются на языке сценариев страницы.Именно так в настоящее время работают текущие библиотеки тегов.

В библиотеке тегов JSTL-EL выражения указываются на языке выражений JSTL.Выражение является строковым литералом в синтаксисе EL.

При использовании библиотеки тегов EL нельзя передать выражение языка сценариев для значения атрибута.Это правило позволяет проверять синтаксис выражения во время перевода.

Так что, возможно, ваше затмение и сервер используют разные библиотеки тегов.

2 голосов
/ 26 ноября 2012

попробуйте это: измените это:

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

на yes:

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

надеюсь, что это работает для вас.Я получил это от www.csdn.net.

...