IntelliJ 和 JSP/JSTL 无法解析 tomcat7 中 JSTL 的 taglib

Posted

技术标签:

【中文标题】IntelliJ 和 JSP/JSTL 无法解析 tomcat7 中 JSTL 的 taglib【英文标题】:IntelliJ and JSP/JSTL cannot resolve taglib for JSTL in tomcat7 【发布时间】:2015-09-11 16:15:40 【问题描述】:

首先,我的 JSTl 代码可以在我的服务器上运行,因为我在 tomcat7 的 Lib 文件夹中有正确的 Jar 文件。这只是一个 IDEA 问题。我的问题归结为我将相同的 jar 文件放在 IntelliJ 中的文件目录中的位置。

我在 IntelliJ 和 JSTL 中遇到了错误。

我的问题是当我使用时

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

导致无法使用 uri 解析 taglib。我尝试了不同的 Jar 文件,我知道我必须为我的 servlet 更正版本。

我在 Ubuntu Server 15.04 和 IntelliJ 14.1.3 上运行 tomcat7。

我尝试通过项目结构导入 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

还是没有运气。

【问题讨论】:

【参考方案1】:

首先将其添加到.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并按OK,它将下载并添加上述库作为模块。 现在您应该不会有任何语法错误。

【讨论】:

@ShamsUIAzeem 添加后告诉我The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application 如何修复它 在我的情况下,添加依赖项 javax.servlet:jstl:1.2 没有用。 添加依赖项 jstl:jstl:1.2 有效。【参考方案2】:

如果你使用的是 maven,在 pom.xml 的 &lt;dependencies&gt;&lt;/dependencies&gt; 标签内添加以下代码

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

【讨论】:

谢谢!我决定在我的情况下添加&lt;scope&gt;runtime&lt;/scope&gt;【参考方案3】:

如果按照 Shams UI Azeem 提供的说明操作后仍然出现错误,则可能需要将 JSTL 库添加到 WAR Exploded 工件中。为此:

    转到项目结构。在项目设置下,选择工件。在菜单框的底部,可能会出现一条消息,指出使用的 JSTL 库未包含在 WAR 中。

2a。 消息可见。如果消息显示,旁边应该有一个修复按钮。单击此修复按钮。选择“将javax.servlet:jstl:1.2 添加到工件”。

2b。 消息不可见。 如果消息未显示,则查看上方以查看 javax.servet:jstl:1.2 (Project Library) 是否位于“可用元素”列下方。如果是,请右键单击它并选择“放入/WEB-INF/lib”。

如果您使用 Maven,则不会出现 Fix 消息,但您仍需要执行此操作。

【讨论】:

我的问题在 Arpan Srivastava 的评论和@Jack J 的回答之后得到了解决。【参考方案4】:

根据 Maven 存储库,javax.servlet:jstl 已移至 javax.servlet.jsp.jstl,但后者无法解决 URI 解析问题。

添加旧的 javax.servlet:jstl 依赖项可以解决问题。

【讨论】:

【参考方案5】:

我终于用这些来工作了:

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

【讨论】:

以上是关于IntelliJ 和 JSP/JSTL 无法解析 tomcat7 中 JSTL 的 taglib的主要内容,如果未能解决你的问题,请参考以下文章

IDEA 之 ERROR:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

绝对 uri:http://java.sun.com/jsp/jstl/core 无法在 web.xml 或使用此应用程序部署的 jar 文件中解析

JSP和JSTL视图解析器

无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

ECSHOP - BUG - 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

在Intellij Idea中怎么引入c标签