web-dev-qa-db-fra.com

Comment ajouter JSTL à Maven?

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&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>

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

31
La Chamelle

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.

55
La Chamelle

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>
17
Kaleb Brasee
<!-- 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>
7
Koray Tugay

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>
1
Nicola Isotta