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

时间:2015-12-31 00:19:00

标签: eclipse jsp taglib java-ee-7

我正在尝试在JSP页面中使用以下标记lib:

<%@ 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有同样的问题:

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

备注:以下链接提供404 HTTP错误:http://central.maven.org/maven2/javax/servlet/jsp/jstl/jstl/1.2/jstl-1.2.jar

谢谢。

2 个答案:

答案 0 :(得分:4)

如果您的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中的JSF 1.x + Facelets 1.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

答案 1 :(得分:0)

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

但是,我还没有找到使用URI的taglib的实现。因此,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文件中,因为应该使用应用程序服务器使用的文件。