IntelliJ 和 JSP/JSTL 无法解析 tomcat7 中 JSTL 的标签库
IntelliJ and JSP/JSTL cannot resolve taglib for JSTL in tomcat7
首先,我的 JSTl 代码可以在我的服务器上运行,因为我在 tomcat7 的 Lib 文件夹中有正确的 Jar 文件。这确实是一个 IDEA 问题。我的问题归结为我将相同的 jar 文件放在 IntelliJ 文件目录中的位置。
我 运行 在 IntelliJ 和 JSTL 中遇到错误。
我的问题是当我使用
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
它导致无法使用 uri 解析 taglib。我尝试了不同的 Jar 文件,我知道我必须为我的 servlet 更正版本。
Im 运行 tomcat7 在 Ubuntu 服务器 15.04 和 IntelliJ 14.1.3 上。
我试过通过项目结构导入jar文件,并在不同的地方包含它,但在重新构建项目、关闭并重新打开IDEA后仍然出现同样的错误。
此示例代码在部署到 tomcat 时运行,但 IntelliJ 不断出错。
<table border="1">
<c:forEach var="a" items="${data}">
<tr>
<td>${a}</td>
</tr>
</c:forEach>
</table>
<c:forEach begin="0" end="255" var="i">
<span style='color:rgb(
<c:out value="${i}"/>,
<c:out value="${i}"/>,
<c:out value="${i}"/>);'>
<c:out value="${i}"/></span> <br />
</c:forEach>
我想知道如何阻止 IntelliJ 在我的语法上给出错误,即使代码有效。
我已阅读JSTL in IntelliJ gives errors in JSP
和
https://www.jetbrains.com/idea/features/jsp_editor.html
仍然没有运气。
首先将此添加到您的 .jsp
文件的顶部:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
它仍然会给出语法错误,但您可以通过添加 javax.servlet:jstl:1.2
作为模块依赖项来解决这个问题。为此,请按照下列步骤操作:
- 单击您的项目名称并按 F4 调出模块设置对话框。
- 然后转到
modules
部分的 dependencies
选项卡。
- 单击绿色
+
图标 →
库 →
来自 Maven。
- 在搜索栏中搜索
javax.servlet:jstl:1.2
并按确定,它将下载并添加上述库作为模块。
- 现在你应该不会有任何语法错误了。
如果您使用的是maven,请在<dependencies></dependencies>
标签内的pom.xml中添加以下代码
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
如果按照 Shams UI Azeem 提供的说明进行操作后仍然出现错误,您可能需要将 JSTL 库添加到 WAR Exploded 工件中。为此:
- 转到项目结构。在项目设置下,select 个工件。在菜单框的底部,可能有一条消息提到所使用的 JSTL 库未包含在 WAR.
中
2a。 消息可见。如果显示消息,则其旁边应该有一个“修复”按钮。单击此修复按钮。 Select "add javax.servlet:jstl:1.2
to the artifact".
2b。 消息不可见。 如果消息未显示,请查看上方以查看 javax.servet:jstl:1.2 (Project Library)
是否位于可用元素列下方。如果是,请右键单击它并 select "Put into /WEB-INF/lib".
如果您使用的是 Maven,则不会出现 Fix 消息,但您仍然需要这样做。
根据 Maven 存储库,javax.servlet:jstl 已移至 javax.servlet.jsp.jstl,但是后者没有解决 URI 解析问题。
添加旧的 javax.servlet:jstl 依赖关系解决了问题。
我终于可以使用这些:
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
<version>1.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.1</version>
</dependency>
问题就在那里,因为默认情况下,jstl jar 是为作用域添加的 仅编译时 我们需要让它为 运行时[=26= 添加] 这样做。
- 单击您的项目名称并按 F4 调出模块设置对话框 或 右键单击项目名称并找到 打开模块设置.
- 转到模块部分的依赖项选项卡。
- 找到
javax.servlet:jstl:x.x
,看它的作用域,改成Runtime.
- 此外,您需要将
jstl:jar
添加到 WEB-INF/lib
文件夹。
首先,我的 JSTl 代码可以在我的服务器上运行,因为我在 tomcat7 的 Lib 文件夹中有正确的 Jar 文件。这确实是一个 IDEA 问题。我的问题归结为我将相同的 jar 文件放在 IntelliJ 文件目录中的位置。
我 运行 在 IntelliJ 和 JSTL 中遇到错误。
我的问题是当我使用
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
它导致无法使用 uri 解析 taglib。我尝试了不同的 Jar 文件,我知道我必须为我的 servlet 更正版本。
Im 运行 tomcat7 在 Ubuntu 服务器 15.04 和 IntelliJ 14.1.3 上。
我试过通过项目结构导入jar文件,并在不同的地方包含它,但在重新构建项目、关闭并重新打开IDEA后仍然出现同样的错误。
此示例代码在部署到 tomcat 时运行,但 IntelliJ 不断出错。
<table border="1">
<c:forEach var="a" items="${data}">
<tr>
<td>${a}</td>
</tr>
</c:forEach>
</table>
<c:forEach begin="0" end="255" var="i">
<span style='color:rgb(
<c:out value="${i}"/>,
<c:out value="${i}"/>,
<c:out value="${i}"/>);'>
<c:out value="${i}"/></span> <br />
</c:forEach>
我想知道如何阻止 IntelliJ 在我的语法上给出错误,即使代码有效。
我已阅读JSTL in IntelliJ gives errors in JSP
和
https://www.jetbrains.com/idea/features/jsp_editor.html
仍然没有运气。
首先将此添加到您的 .jsp
文件的顶部:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
它仍然会给出语法错误,但您可以通过添加 javax.servlet:jstl:1.2
作为模块依赖项来解决这个问题。为此,请按照下列步骤操作:
- 单击您的项目名称并按 F4 调出模块设置对话框。
- 然后转到
modules
部分的dependencies
选项卡。 - 单击绿色
+
图标→
库→
来自 Maven。 - 在搜索栏中搜索
javax.servlet:jstl:1.2
并按确定,它将下载并添加上述库作为模块。 - 现在你应该不会有任何语法错误了。
如果您使用的是maven,请在<dependencies></dependencies>
标签内的pom.xml中添加以下代码
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
如果按照 Shams UI Azeem 提供的说明进行操作后仍然出现错误,您可能需要将 JSTL 库添加到 WAR Exploded 工件中。为此:
- 转到项目结构。在项目设置下,select 个工件。在菜单框的底部,可能有一条消息提到所使用的 JSTL 库未包含在 WAR. 中
2a。 消息可见。如果显示消息,则其旁边应该有一个“修复”按钮。单击此修复按钮。 Select "add javax.servlet:jstl:1.2
to the artifact".
2b。 消息不可见。 如果消息未显示,请查看上方以查看 javax.servet:jstl:1.2 (Project Library)
是否位于可用元素列下方。如果是,请右键单击它并 select "Put into /WEB-INF/lib".
如果您使用的是 Maven,则不会出现 Fix 消息,但您仍然需要这样做。
根据 Maven 存储库,javax.servlet:jstl 已移至 javax.servlet.jsp.jstl,但是后者没有解决 URI 解析问题。
添加旧的 javax.servlet:jstl 依赖关系解决了问题。
我终于可以使用这些:
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
<version>1.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.1</version>
</dependency>
问题就在那里,因为默认情况下,jstl jar 是为作用域添加的 仅编译时 我们需要让它为 运行时[=26= 添加] 这样做。
- 单击您的项目名称并按 F4 调出模块设置对话框 或 右键单击项目名称并找到 打开模块设置.
- 转到模块部分的依赖项选项卡。
- 找到
javax.servlet:jstl:x.x
,看它的作用域,改成Runtime. - 此外,您需要将
jstl:jar
添加到WEB-INF/lib
文件夹。