Je travaille sur un projet JSF 2.0 utilisant Mojarra, PrimeFaces et Tomcat 6.x.
J'ai besoin d'utiliser c: forEach pour certains composants primefaces comme le nombre dynamique de p: tab mais j'ai un problème avec le c: forEach. Toutes les autres balises de JSTL fonctionnent Nice.
J'ai l'erreur suivante:
Java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTagStatus
J'utilise ce qui suit xmlns:c="http://Java.Sun.com/jsp/jstl/core"
, j'ai essayé de remplacer par xmlns:c="http://Java.Sun.com/jstl/core"
mais rien ne s'affiche avec le second.
Voici la version exacte de 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>
Comment puis-je le réparer?
Je peux donner des informations plus spécifiques si besoin.
EDIT: J'ai ajouté et essayé différentes étendues (runtime et compilation) mais rien ne change:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
La liste des référentiels:
<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&nf=1&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>
Voici le contenu de $ 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
Vous devez inclure la bibliothèque jstl dans votre distribution. Cela peut être fourni par le conteneur, bien que ce ne soit pas une pratique recommandée. La dépendance maven pour la version actuelle (au moment de l'écriture) est ici:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
Cependant, il vaut toujours la peine de vérifier le référentiel central maven pour les mises à jour.
Comme l'a dit Balus, il vous suffit d'ajouter JSTL à votre pom.xml car Tomcat ne l'inclut pas. 1.2 est la version la plus récente:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 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>
Et puis vous pouvez utiliser les Java balises et fonctions standard comme suit dans votre page jsp:
<%@ taglib prefix="c"
uri="http://Java.Sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn"
uri="http://Java.Sun.com/jsp/jstl/functions" %>
Cela fonctionne également seul:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
Je sais que la question est ancienne, mais elle est élevée dans les résultats de Google, alors j'ajoute cela.
Les versions JSTL plus récentes sont disponibles (uniquement) sous org.glassfish.web groupId . Exemple:
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.4</version>
</dependency>