如何将JSTL添加到Maven?

时间:2011-02-28 22:10:00

标签: maven jstl

我正在使用Mojarra,PrimeFaces和Tomcat 6.x开发JSF 2.0项目。

我需要使用c:forEach来处理某些素数组件,例如p:tab的动态数量,但我对c:forEach有问题。 JSTL的所有其他标签都很好用。

我有以下错误:

  

java.lang.NoClassDefFoundError:   的javax / servlet的/ JSP / JSTL /型芯/ LoopTagStatus

我使用以下xmlns:c="http://java.sun.com/jsp/jstl/core",我尝试用xmlns:c="http://java.sun.com/jstl/core"替换,但第二次没有显示。

这是lib的确切版本:

<dependency>
    <groupId>javax.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.0.2-FCS</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.0.4-b03</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>2.2.1</version>
</dependency>

<dependency>
    <groupId>javax.el</groupId>
    <artifactId>el-api</artifactId>
    <version>2.2</version>
</dependency>

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>el-impl</artifactId>
    <version>2.2</version>
</dependency>

我如何解决它?

如果需要,我可以提供更具体的信息。

修改 我添加并尝试了不同的范围(运行时和编译),但没有任何改变:

<dependency>
    <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
</dependency>

存储库列表:

  <repositories>
    <repository>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <layout>default</layout>
      <url>http://repo1.maven.org/maven2</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>maven-repository.dev.java.net</id>
      <name>Java.net Repository for Maven 1</name>
      <url>http://download.java.net/maven/1/</url>
      <layout>default</layout>
    </repository>
    <repository>
      <id>maven2</id>
      <name>Java.net Repository for Maven</name>
      <url>http://download.java.net/maven/2</url>
      <layout>default</layout>
    </repository>
    <repository>
      <id>prime-repo</id>
      <name>Prime Technology Maven Repository</name>
      <url>http://repository.prime.com.tr</url>
      <layout>default</layout>
    </repository>
    <repository>
      <id>JBoss2</id>
      <url>https://repository.jboss.org/nexus/content/repositories/public</url>
    </repository>
    <repository>
      <id>JBoss</id>
      <url>http://repository.jboss.com/maven2</url>
    </repository>
    <repository>
      <id>EclipseLink Repo</id>
      <url>http://www.eclipse.org/downloads/download.php?r=1&amp;nf=1&amp;file=/rt/eclipselink/maven.repo</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>itextpdf.com</id>
      <name>Maven Repository for iText</name>
      <url>http://maven.itextpdf.com/</url>
    </repository>

    <repository>
      <id>guiceyfruit.release</id>
      <name>GuiceyFruit Release Repository</name>
      <url>http://guiceyfruit.googlecode.com/svn/repo/releases/</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <enabled>true</enabled>
      </releases>
    </repository>
  </repositories>

这是$ TOMCAT_HOME / lib

的内容
  

annotations-api.jar catalina-ha.jar   catalina-tribes.jar el-impl-2.2.jar   jasper.jar jsf-api.jar
  jsp-api.jar servlet-api.jar
  Tomcat的dbcp.jar
  tomcat-i18n-fr.jar catalina-ant.jar
  catalina.jar el-api-2.2.jar
  jasper-el.jar jasper-jdt.jar
  jsf-impl-2.0.4-b03.jar ojdbc6.jar
  tomcat-coyote.jar tomcat-i18n-es.jar   Tomcat的I18N-ja.jar

5 个答案:

答案 0 :(得分:55)

您必须在发行版中包含jstl库。这可以由容器提供,但不建议这样做。当前版本的maven依赖(编写时)如下:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

虽然,总是值得检查maven central repository更新。

答案 1 :(得分:17)

正如Balus所说,你只需要将JSTL添加到你的pom.xml中,因为Tomcat不包含它。 1.2是最新版本:

<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
</dependency>

答案 2 :(得分:7)

<!-- standard.jar --> 
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

<!-- JSTL --> 
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.1.2</version>
</dependency>

然后您可以在jsp页面中使用Java标准标记和函数:

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

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

这也可以单独使用:

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

答案 3 :(得分:1)

我知道这个问题已经过时了,但谷歌搜索结果却很高,所以我添加了这个。

较新的JSTL版本仅在org.glassfish.web groupId下可用。例如:

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>javax.servlet.jsp.jstl</artifactId>
    <version>1.2.4</version>
</dependency>

答案 4 :(得分:0)

在最新的Tomcat版本中使用:

<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-spec</artifactId>
    <version>1.2.5</version>
</dependency>
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
</dependency>