web-dev-qa-db-ja.com

式言語とEclipseの警告:「アイテム」はランタイム式をサポートしていません

次の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式について警告している理由を誰かが正しい方向に教えてくれますか?

27
fasseg

TaglibディレクティブはJSTL 1.0 taglibをインポートします。代わりにJSTL 1.1にする必要があります(URIの違いに注意してください):

<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c" %>  
56
axtavt

可能な解決策( ここにあります ):

ツインライブラリ

JSTLタグライブラリには2つのバージョンがあり、属性値のランタイム式の使用をサポートする方法のみが異なります。

JSTL-RTタグライブラリでは、式はページのスクリプト言語で指定されます。これは、現在のタグライブラリで現在動作している方法とまったく同じです。

JSTL-ELタグライブラリでは、式はJSTL式言語で指定されます。式は、ELの構文における文字列リテラルです。

ELタグライブラリを使用する場合、属性の値にスクリプト言語の式を渡すことはできません。このルールにより、変換時に式の構文を検証できます。

したがって、Eclipseとサーバーが異なるタグライブラリを使用している可能性があります。

4
Andreas_D

これを試してください:これを変更してください:

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

はい:

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

それがあなたのために働くことを願っています。これはwww.csdn.netから入手しました。

2
Kurt_Zhu