Problemas com JSTL no web.xml

Pessoal,
tô usando eclipse com plugin WTP e gostaria de adicionar o suporte a
JSTL em minha aplicação. Quando uso o cabeçalho padrão que o WTP
utiliza o Eclipse marca a com erro e dá a seguinte mensagem:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'taglib'. One of '{"http://
 java.sun.com/xml/ns/j2ee":description, "http://java.sun.com/xml/ns/j2ee":display-name, "http://
 java.sun.com/xml/ns/j2ee":icon, "http://java.sun.com/xml/ns/j2ee":distributable, "http://
 java.sun.com/xml/ns/j2ee":context-param, "http://java.sun.com/xml/ns/j2ee":filter, "http://
 java.sun.com/xml/ns/j2ee":filter-mapping, "http://java.sun.com/xml/ns/j2ee":listener, "http://
 java.sun.com/xml/ns/j2ee":servlet, "http://java.sun.com/xml/ns/j2ee":servlet-mapping, "http://
 java.sun.com/xml/ns/j2ee":session-config, "http://java.sun.com/xml/ns/j2ee":mime-mapping, 
 "http://java.sun.com/xml/ns/j2ee":welcome-file-list, "http://java.sun.com/xml/ns/j2ee":error-page, 
 "http://java.sun.com/xml/ns/j2ee":jsp-config, "http://java.sun.com/xml/ns/j2ee":security-
 constraint, "http://java.sun.com/xml/ns/j2ee":login-config, "http://java.sun.com/xml/ns/
 j2ee":security-role, "http://java.sun.com/xml/ns/j2ee":env-entry, "http://java.sun.com/xml/ns/
 j2ee":ejb-ref, "http://java.sun.com/xml/ns/j2ee":ejb-local-ref, "http://java.sun.com/xml/ns/
 j2ee":service-ref, "http://java.sun.com/xml/ns/j2ee":resource-ref, "http://java.sun.com/xml/ns/
 j2ee":resource-env-ref, "http://java.sun.com/xml/ns/j2ee":message-destination-ref, "http://
 java.sun.com/xml/ns/j2ee":message-destination, "http://java.sun.com/xml/ns/j2ee":locale-
 encoding-mapping-list}' is expected.

Eu usei a taglib do seguinte jeito

 <taglib>
    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/c.tld</taglib-location>
  </taglib>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

Quando eu simplesmente uso sem nenhum atributo o erro
desaparece.
Qual url deve ser adicionada para poder ter suporte a tag JSTL?

Obrigado!

Você deve coloca o jstl.jar na pasta /WEB-INF/lib/ de sua aplicação e adicionar a url <%@ taglib uri=“http://java.sun.com/jstl/core” prefix=“c” %>
na pagina onde quer utilizar o taglib

Eu já fiz isso.
O eclipse marca o erro logo no xml

Toda a configuração que tenho no web.xml é essa:

<?xml version="1.0" encoding="ISO-8859-1" ?> Aplicacao web simples

em nenhum momento eu faço referencia a jstl no .xml , como me parece ser o ‘code’ q vc colocou acima … tenta deixar sem nada no xml referenta a jstl… se ano funfar, ja nao sei :smiley:

corrigindo…nao é referencia a jstl…mas ve se consegue dar uma enxugada no .xml

Pô, agora não tá dando mais esse erro. Em compensação quando eu uso
a tag, parece que ela não é reconhecida.

Por exemplo se eu uso

${atributo}

Onde atributo é um atributo que eu “setei” no servlet.

Ai ele não mostra o conteúdo do atributo. Só mostra a String ${atributo}

O problema é que quando eu usava essa técnica sem usar o WTP
(fazia na mão) tudo funcionava perfeitamente.

É como se dentro do Eclipse não tivesse reconhecendo a tag do JSTL

${} seria Expresion Language e nao faz parte da jstl, é uma implementação que vem do jsp. Vc tem que setar a tag false no seu web.xml.

Posso estar errado quanto a tag, mas o Expression language é algo a parte da jstl.

Fala Rafael,

Esse é um problema clássico de versões da especificação de servlets que você está usando. Você define a versão que quer usar no web.xml (version=“2.4”, por exemplo).

Na versão mais antiga (2.3), você precisa referenciar todos os arquivos .tld das taglibs que vai usar no web.xml através de tags <taglib>, como você estava fazendo.

Indo além, a url para as taglibs do jstl na versão 2.3 de servlets era: http://java.sun.com/jstl/core, http://java.sun.com/jstl/fmt, etc. A expression language só podia ser usada dentro de tags jstl (<c:out value="${variavel}"/> ) e não direto no jsp. Isso pois era JSTL EL.

Na versão atualmente mais usada (2.4), você não precisa mais especificar os arquivos .tld das taglibs que vai usar. O conteiner procura automaticamente nos jars disponíveis no classpath (WEB-INF/lib, por exemplo).

A url das taglibs do jstl para a versão 2.4 mudou: http://java.sun.com/jsp/jstl/core, http://java.sun.com/jsp/jstl/fmt, etc. Além disso, a expression language agora pertence ao JSP (JSP EL) e não mais à JSTL, por isso você pode usar expressões ${variavel} em qualquer lugar do seu jsp, não restrito apenas a atributos de tags.

taglib directive for “c” does not exist or TLD is not found…

Porque ele da esse erro em tempo de compilacao e nao em tempo de execucao. Ele da esse erro no eclipse com uma linha vermelha em baixo do codigo… mas eu executo e da certo…

que plugin vc está usando para os jsps?
O standard.jar está no classpath?
a uri da taglib está certa?
Seu web.xml tem version=“2.4” ?

Estou tendo um problema parecido, aparece taglib directive for “tags” does not exist or TLD is not found. Este “tags” é o nome da taglib onde ficam coisas específicas do nosso sistema, as classes não estão em um .jar pq estamos sempre modificando as taglibs. Estranho que no eclipse 3.1 (java 5) tudo funciona legal, só no EasyEclipse 3.2 (java 6) que dá problema. Não posso mais usar .tld, é isso? :frowning:

abraços!

Estou com o mesmo problema… no eclipse aparece o erro, mas na execução não…

1 amateras
2 sim está no classpath
3 está certa http://java.sun.com/jsp/jstl/core
4 sim. tem version 2.4

estou seguindo a apostila da caelum
existe outra alternativa?

Coloque na sua página JSP

<%@ page isELIgnored=“false” %>