2011-02-28 104 views
30

Estoy trabajando en un proyecto JSF 2.0 usando Mojarra, PrimeFaces y Tomcat 6.x.¿Cómo agregar JSTL a Maven?

Necesito usar c: forEach para algún componente de las primas como el número dinámico de p: tab pero tengo un problema con c: forEach. Todas las otras etiquetas de JSTL funcionan bien.

tengo el siguiente error:

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTagStatus

utilizo el siguiente xmlns:c="http://java.sun.com/jsp/jstl/core", traté de reemplazar con xmlns:c="http://java.sun.com/jstl/core" pero nada pantalla con la segunda.

Ésta es la versión exacta 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> 

cómo puedo solucionarlo?

Puedo proporcionar información más específica si es necesario.

EDIT: añadí y trató diferentes ámbitos (tiempo de ejecución y compilar), pero no cambian nada:

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

La lista de repositorio:

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

Este es el contenido 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

+5

Tomcat no se envía con JSTL fuera de la caja. Necesitas instruir a tu Maven para que agregue JSTL. Mejoré el título y el etiquetado para atraer a la gente adecuada. – BalusC

Respuesta

54

Debe incluir la biblioteca jstl en su distribución. Esto puede ser proporcionado por el contenedor, aunque esa no es una práctica recomendada. La dependencia Maven para la versión actual (en la escritura) está aquí:

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

Aunque, siempre vale la pena comprobar el maven central repository para las actualizaciones.

+0

este hilo puede ser viejo, pero ¿dónde diablos está pom.xml? –

+2

@HaikalNashuha Usualmente en la raíz de su proyecto Maven. –

+0

esto puede ayudar a algunos, me ayudó: [configuración de maven] (http://www.murraywilliams.com/2011/11/running-jstl-1-2-on-tomcat-7-using-maven/comment-page -1/# comment-71019) – jsky

17

As Balus dijo, solo necesitas agregar JSTL a tu pom.xml porque Tomcat no lo incluye. 1.2 es la versión más reciente:

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

No funciona, puede haber algo que falta en mi pom o hay algunos conflictos? –

+0

Necesita incluir el jstl.jar en el directorio lib de tomcat y usar el alcance provisto. –

+0

@LaChamelle ¿Qué servidor estás usando? ¿Has incluido taglibs estándar también? –

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> 

Y a continuación, puede utilizar los Java Standart etiquetas y funciones de la siguiente manera en su página JSP:

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

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

Esto también funciona solo:

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

Sé que la pregunta es antigua , pero es alto en los resultados de Google, así que estoy agregando esto.

Las versiones más nuevas de JSTL están disponibles (solo) en org.glassfish.web groupId. Ejemplo:

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

¿Por qué estos no están disponibles en el repositorio de maven? https://mvnrepository.com/ –

+0

En realidad son: https://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl –

Cuestiones relacionadas