神秘的Eclipse JSP验证错误

时间:2010-09-24 18:28:28

标签: java eclipse validation jsp

Eclipse(Helios)偶尔会将有效的JSP内容标记为有错误。当我使用< c:if>时,它似乎经常会中断。标签。例如,在仅包含此内容的JSP中:

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

<c:if test="${1 == 1}">
something
</c:if>

</body>
</html>

编译后,“问题”标签中显示以下错误:

  • 不兼容的操作数类型字符串和 第1行
  • javax.servlet.jsp.JspException不能 被解决为类型行1
  • javax.servlet.jsp.PageContext不能 被解决为类型行1

代码运行正常。对JSP的验证是否存在问题,我是否遗漏了一些明显的问题,或者是否表明某些内容未正确设置。

16 个答案:

答案 0 :(得分:45)

好吧,我找到了如何解决这个错误。 将其添加到Maven依赖项(pom.xml):

<!-- dependency to fix JSPServletException -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>jsp-api</artifactId>
        <version>6.0.32</version>
        <scope>provided</scope>               
    </dependency>

如果您觉得它有用,请发表评论,就像它帮助我一样。

答案 1 :(得分:36)

根据评论,我最终关闭了部分JSP验证,修复了这个问题。

  1. 转到“项目 - &gt;属性 - &gt;验证”。
  2. 点击“配置工作区设置...”。
  3. 取消选择JSP语法验证器(手动和构建)的选项。
  4. 我希望我错过了一些东西并且有办法解决这个问题,但我不得不承认JSP验证是垃圾。

答案 2 :(得分:21)

我遇到了同样的问题,问题是jsp-api库,您可以将依赖项添加到 pom (如其他答案中所述),或者您也可以添加 target 运行时,eclipse会自动将该库添加到您的类路径中:

Project -> Properties -> Targeted Runtimes 

选择您的服务器。

答案 3 :(得分:5)

为了解决问题:
- javax.servlet.jsp。*需要jsp-api.jar
- javax.servlet.http。*需要servlet-api.jar

您需要在项目设置中将这些库添加到Java Build路径。这些库可以在tomcat / lib目录中找到(对于Tomcat 6.0)。

答案 4 :(得分:3)

这是一个老问题,但我想我可能会提到我在Mac OS X上的Juno中也是这样 - 特别是在我从外部更改文件然后在Eclipse中刷新项目之后。在各种奇怪的地方都有下划线,甚至是JSP评论中的单词。

可能(可能?!)与bug 376926有关,这显然在一周前得到了修复?

答案 5 :(得分:2)

不应部署的eclipse依赖项解决方案是添加UserLibrary容器,并将其包含在依赖项目中。

  1. 创建目录/ home / user * / eclipse-deps /并从* / tomcat / lib目录复制jsp-api.jar
  2. 在Eclipse中转到项目属性 - &gt;构建路径,并创建新的“UserLibrary”,例如。 IdeDeps。
  3. 在IdeDeps库中包含/ home / user / eclipse-deps /,并在所有依赖于jsp-api.jar的项目中包含用户库 (在classpath中:&lt; classpathentry kind =“con”path =“org.eclipse.jdt.USER_LIBRARY / IdeDeps”/&gt;)
  4. 你可以为所有不应该部署的* .jars做到这一点,但是eclipse需要它来进行验证。

答案 6 :(得分:2)

对于Tomcat 7.0.x,您需要在pom中使用以下内容

<properties>
    <org.apache.tomcat.version>7.0.28</org.apache.tomcat.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jsp-api</artifactId>
        <version>${org.apache.tomcat.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

答案 7 :(得分:1)

尝试检查项目类路径。看起来您的项目中没有JSP库(因此无法解析“JspException”),或者您的库版本与JSP编译器版本不同。

默认情况下,该库包含在您部署应用程序的应用程序服务器中,因此代码在部署时运行良好。但是,如果Eclipse内部编译器缺少库(或者版本不正确),Eclipse编辑器会显示应用程序服务器中不存在的错误。

答案 8 :(得分:1)

我遇到了同样的问题,并最终通过切换(使用Maven)到servlet-api的2.3版来实现:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.3</version>
    <scope>provided</scope>
</dependency>

显然2.4及更高版本不再有javax.servlet.jsp构建。如果您仍想使用2.4或更高版本,则可以在另一个包中找到该库。

答案 9 :(得分:1)

您需要在类路径中包含jap-api.jar。

答案 10 :(得分:1)

更简单的方法是

select the project -> Properties -> Java Build Path -> Libraries Tab

选择add Libraries。从那里选择Server Runtime。它将列出您已配置的所有服务器运行时。从那里选择与项目相关的服务器运行时。

这将重建并重新验证项目,并且将删除所有这些重影错误。

希望这有帮助。

答案 11 :(得分:0)

jsp-api.jar添加到构建类路径中会修复它。对于tomcat 5.x

jsp-api.jar位于common\lib

答案 12 :(得分:0)

我在转移到Maven(使用m2e)时也看到了同样的问题,得到的错误如“javax.servlet.http无法解析”和一些Spring标签未定义的警告。最后我发现它是因为我的构建配置中的java版本(v1.6)与facet配置(v1.7)中的版本不同。在将v1.7更改为v1.6之后,问题就消失了。

答案 13 :(得分:0)

我遇到了同样的问题,但 jsp-api.jar servlet-api.jar 都已在构建路径中。禁用 JSP语法验证器也没有帮助。

相反,我必须禁用 JSP内容验证器,并启用语法验证程序。我仍然在我的JSP中加下划线代码,但没有红叉表示编译错误,这就是重点:)

答案 14 :(得分:0)

正如你们许多人所提到的,问题在于构建路径和缺少的库。我发现了一个非常简单的修复此构建路径问题。这是解决方案: 在&#39; Java Build Path&#39;在日食中,去订购和出口&#39;选项卡,并确保“Apache Tomcat v7.0&#39;库(或使用eclipse安装的Tomcat的任何版本)都会被检查。这可以立即解决问题。没有别的麻烦。 : - )

在这种情况下也无需关闭任何验证。

答案 15 :(得分:0)

对我来说,当我手动输入行时,我收到错误,直到我关闭了标记,但错误从未消失。我发现了一行类似的代码,我删除了有问题的代码,复制并粘贴了好的代码,然后根据需要在标记内部进行了更改。没有更多的错误!不是一个理想的解决方案,但它对我有用。