神秘的Eclipse JSPvalidation错误

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> 

编译后,在“问题”选项卡中显示以下错误:

  • 不兼容的操作数typesstring和int行1
  • javax.servlet.jsp.JspException无法parsing为types行1
  • javax.servlet.jsp.PageContext无法parsing为types行1

代码运行良好。 JSP的validation是否有问题,我是否遗漏了一些明显的东西,或者这是否表明某些东西设置不正确。

那么,我发现如何解决这个错误。 把它添加到你的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> 

如果您发现它有用,请发表评论,尽可能帮助我。

根据评论,我最终closures了一部分JSPvalidation,解决了这个问题。

  1. 转到“项目 – >属性 – >validation”。
  2. 点击“configuration工作区设置…”。
  3. 取消selectJSP语法validation器的选项。 您需要取消选中手动和生成

我希望我错过了一些东西,有办法解决这个问题,但我不得不承认,JSPvalidation是垃圾。

我有同样的问题,问题是jsp-api库,你可以添加依赖到你的pom (如其他答案中所解释的),或者你也可以添加目标运行时和eclipse会自动添加该库到你的类-path:

 Project -> Properties -> Targeted Runtimes 

并select你的服务器。

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

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

这是一个古老的问题,但我想我可能会提到我在Mac OS X上的Juno也得到了这个 – 尤其是在我更改外部文件后,然后在Eclipse中刷新项目。 强调在各种奇怪的地方,甚至在JSP评论中的一半。

可能(可能?!)与bug 376926有关,在一个星期前显然已经修复了一些?

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

  1. 创build目录例如/ home / user * / eclipse-deps /并从* / tomcat / lib目录复制jsp-api.jar
  2. 在Eclipse中转到项目属性 – >构buildpath,并创build新的“UserLibrary”例如。 IdeDeps。
  3. 在IdeDeps库中包含/ home / user / eclipse-deps /,并将用户库包含在所有依赖于jsp-api.jar的项目中(在classpath中:<classpathentry kind =“con”path =“org.eclipse.jdt。 USER_LIBRARY / IdeDeps“/>)

你可以为所有不应该被部署的* .jars,但是eclipse需要它来validation。

对于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> 

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

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

你需要在你的类path中包含jap-api.jar。

我有同样的问题,并最终通过(使用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构build。 如果您仍想使用2.4或更高版本,则可以在另一个软件包中find该库。

更简单的方法是

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

selectadd Libraries 。 从那里selectServer Runtime 。 它将列出您configuration的所有服务器运行时。 从那里select您与项目关联的服务器运行时。

这将重build和重新validation项目和所有这些鬼错误将被删除。

希望这可以帮助。

我也看到同样的问题,我转移到Maven(与m2e),得到像“javax.servlet.http无法parsing”和一些spring标签未定义的警告错误。 最后我发现这是因为我的构buildconfiguration中的java版本(v1.6)与facetsconfiguration(v1.7)中的不一样。 在v1.7更改为v1.6之后,问题就消失了。

jsp-api.jar添加到您的构build类path中可以解决这个问题。 对于tomcat 5.x, jsp-api.jarcommon\lib

我有同样的问题,但jsp-api.jarservlet-api.jar已经在构buildpath。 禁用JSP语法validation器也没有帮助。

相反,我必须禁用JSP Content Validator ,才能启用语法validation程序。 我仍然在我的JSP中强调了代码,但是没有显示编译错误的红叉,这就是要点:)

正如你们中许多人所提到的,这些问题是围绕着构buildpath和缺less的库。 我发现这个构buildpath问题的一个非常简单的修复。 这里是解决办法:在eclipse的'Java Build Path'下,进入'Order and Export'选项卡,并确认'Apache Tomcat v7.0'库(或者你用eclipse安装的Tomcat版本) 。 这立即解决了这个问题。 没有别的麻烦。 🙂

在这种情况下,也不需要closures任何validation。

对我而言,当我手动input行时,我收到了一个错误,直到我closures标签,但错误从未消失。 我发现了一行类似的代码,我删除了违规代码,复制并粘贴了良好的代码,然后根据需要在代码中进行更改。 没有更多的错误! 不是一个理想的解决scheme,但它为我工作。