Java EE 7:找不到 "http://java.sun.com/jsp/jstl/core" 的标签库描述符

Java EE 7 : Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"

我正在尝试在我的 JSP 页面中使用以下标签库:

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

但是 Eclipse 向我显示了这个错误:

Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"

我已经在我的类路径中使用此依赖项拥有 JSTL :

<dependency>
  <artifactId>javaee-api</artifactId>
  <version>7.0</version>
  <scope>provided</scope>
</dependency>

我用的是 WildFly 9。

我对另外两个标签库也有同样的问题:

<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>

备注:以下link给出404 HTTP错误:http://central.maven.org/maven2/javax/servlet/jsp/jstl/jstl/1.2/jstl-1.2.jar

谢谢。

如果您的 Web 应用程序直接使用 JSTL,对于 JSTL 1.0,命名空间是 http://java.sun.com/jstl/core。 在JavaEE 5中,包含了JSTL 1.1,命名空间为http://java.sun.com/jsp/jstl/core。 在JaveEE 6和JavaEE 7中,包含了JSTL 1.2,命名空间为http://java.sun.com/jsp/jstl/core.

但是如果你的web应用程序使用JSF+Facelets,对于JaveEE 5中的JSF1.x+Facelets1.x,命名空间是http://java.sun.com/jstl/core。 对于 JavaEE 6 中的 JSF 2.0+Facelets 2.x,命名空间是 http://java.sun.com/jsp/jstl/core。 对于 JavaEE 7 中的 JSF 2.2+Facelets 2.2,命名空间为 http://xmlns.jcp.org/jsp/jstl/core.

Java EE 7 教程在 What Is Facelets 部分简要说明了 JSTL 的新 URI:

但是,我还没有找到使用 URI 的标签库的实现。因此 URI(及其推荐的名称空间)应定义为:

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

并且要消除错误,您需要在 provided 范围内作为依赖项加载 JSTL 的实现,例如

<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
  <scope>provided</scope>
</dependency>

provided 作用域阻止它被包含到 WAR 文件中,因为应该使用应用程序服务器正在使用的那个。