表达式语言和 Eclipse 警告:“items”不支持运行时表达式

2022-09-01 15:07:05

我有以下 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表达式?


答案 1

您的 taglib 指令导入 JSTL 1.0 taglib。它应该是JSTL 1.1(注意URI的差异):

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

答案 2

可能的解决方案(在此处找到):

孪生库

JSTL 标记库有两个版本,它们仅在于它们支持对属性值使用运行时表达式的方式不同。

在 JSTL-RT 标记库中,表达式是用页面的脚本语言指定的。这正是当前标签库中当前的工作方式。

在 JSTL-EL 标记库中,表达式以 JSTL 表达式语言指定。表达式是 EL 语法中的字符串文本。

使用 EL 标记库时,无法为属性值传递脚本语言表达式。使用此规则可以在转换时验证表达式的语法。

因此,也许您的 eclipse 和服务器使用不同的标签库。