神秘的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,解决了这个问题。
- 转到“项目 – >属性 – >validation”。
- 点击“configuration工作区设置…”。
- 取消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容器,并将其包含在依赖项目中。
- 创build目录例如/ home / user * / eclipse-deps /并从* / tomcat / lib目录复制jsp-api.jar
- 在Eclipse中转到项目属性 – >构buildpath,并创build新的“UserLibrary”例如。 IdeDeps。
- 在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.jar
是common\lib
我有同样的问题,但jsp-api.jar和servlet-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,但它为我工作。