2011-02-28 32 views
30

我正在使用Mojarra,PrimeFaces和Tomcat 6.x開發JSF 2.0項目。如何將JSTL添加到Maven?

我需要使用c:forEach作爲一些primefaces組件,就像p:tab的動態數字一樣,但是我對c:forEach有問題。 JSTL的所有其他標籤都很好。

我有以下錯誤:

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/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

Tomcat不隨JSTL出廠。你需要指示你的Maven事情添加JSTL。我改進了標題和標籤以吸引合適的人。 – BalusC 2011-02-28 23:20:34

回答

54

您必須在您的發行版中包含jstl庫。這可能由容器提供,儘管這不是建議的做法。當前版本(寫作)的Maven的依賴是在這裏:

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

雖然,它總是值得檢查maven central repository更新。

+0

這個線程可能是舊的,但到底是pom.xml? – 2011-11-22 05:28:56

+2

@HaikalNashuha通常在你的Maven項目的根源。 – 2012-01-15 18:17:06

+0

這可能會有所幫助,它幫助了我:[maven setup](http://www.murraywilliams.com/2011/11/running-jstl-1-2-on-tomcat-7-using-maven/comment-page -1 /#comment-71019) – jsky 2013-08-07 12:53:22

17

As Balus說,你只需要將JSTL添加到你的pom.xml中,因爲Tomcat不包含它。 1.2是最新版本:

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

它不起作用,可能是我的POM中缺少某些東西或者存在一些衝突? – 2011-03-01 12:12:34

+0

需要在tomcat lib目錄中包含jstl.jar並使用提供的範圍。 – 2011-03-02 13:26:05

+0

@LaChamelle你在用什麼服務器?你是否也加入了非標準taglibs? – 2014-08-04 15:31:47

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

然後你就可以使用Java斯坦達特標籤和功能在你的JSP頁面如下:

<%@ 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> 
1

我知道這個問題是老,但Google結果很高,所以我添加了這個。

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

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

爲什麼這些在maven倉庫中不可用? https://mvnrepository.com/ – 2017-10-21 15:39:51

+0

他們實際上是:https://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl – 2017-10-24 08:46:58