一个 JSP 得到 org.xml.sax.SAXParseException;已经为元素 "c:set" 指定了属性 "var"

One JSP getting org.xml.sax.SAXParseException; Attribute "var" was already specified for element "c:set"

我是 Java 服务器开发的新手,我正在将一个用 ColdFusion 编写的网络应用程序转换为 Glassfish 4 上的 Java EE 网络应用程序。这个应用程序 JSP 很重(最好使用 servlet 的地方)。这是设计使然,而不是我的决定。

错误是:

org.apache.jasper.JasperException:

PWC6170: Validation error messages from >TagLibraryValidator for sql

null: org.xml.sax.SAXParseException; >lineNumber: 1726; columnNumber: 3; Attribute "var" was already specified for >element "c:set".

看来这些极少数 JSP 不接受 taglib 引用。这是一个示例(在所有文件中都相同): <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

我发现,如果删除 URI 属性的 "jsp/" 部分,错误就会消失(但我无法在 <c:set> 标记中使用 EL 表达式)。所以我想知道我的 Web 容器中是否有两个不同版本的 JSTL?

这是我的 web.xml(删除了所有 servlet 的底部):

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

许多(数百个)JSP 可以很好地使用这个标签库,而且它们是混合的 directoried/locations 所以我真的不知道为什么会这样。帮忙?

很抱歉回答我自己的问题,但我发现了问题所在。有一个 c:set 标签,上面写着

<c:set var="x" var="data" />

而不是

<c:set var="x" value="data" />

这很不寻常,因为页面没有将标记行标记为错误,并且堆栈跟踪(虽然它确实提到了先前定义的 var 属性)指向 taglib 声明。仅供参考,我在 Netbeans 8.0.2 中编程。

Idk,如果有人用谷歌搜索此内容,希望对您有所帮助!