JSTL - alguem me ajuda com um for-each!

10 respostas
S

Oi, sou iniciante em desenvolvimento web. Estou fazendo um site pra facul usando Struts, JSTL, TomCat no Eclipse.
Minha duvida é a seguinte:

Fiz a minha classe herdar DispatchAction para poder utiliza-la com diversos métodos que retornem ActionForward. Pra começar estou fazer o método listar para listar os horario da tabela agenda do banco de dados. Eis o código:

public ActionForward listar(ActionMapping map, ActionForm form,
				HttpServletRequest request, HttpServletResponse response) throws SQLException {
		
				List<AgendaVO> lista = new AgendaDAO().pesquisa();	
				request.setAttribute("agenda", lista);					
				return map.findForward("listagem");					
	}

Configurei o struts-config.xml da seguinte forma:

<action path ="/lista" type ="bo.AgendaBO" parameter="method" scope ="request" >
				   	<forward name="listagem" path="/pages/listaAgenda.jsp" ></forward>
	   	</action>

Criei o JSP usando JSTL pra listar na página:

<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
		
<html>
	<c:forEach var="a" items="${agenda}">
		${a.descricao}
	</c:forEach>
</html>
Porém não esta listando o resultado da forma correta, o que aparece no navegador é:
${a.descricao}
:shock: :?:

Se alguém tiver idéia porque pode estar ocorrendo isso e puder me ajudar ficarei muito grata. Aguardo.
:(

10 Respostas

A

Troca ${a.descricao} por <c:out value="${a.descricao}" />

Somente “${a.descricao}” não significa nada, é uma expressão que vc nao colocou em lugar algum.
O c:out imprime essa expressao pra vc :wink:

S
<c:out value="${a.descricao}" /> </br>

tente com o este código mas continua listando :

${a.descricao}"

também testei um exemplo que achei na Internet:

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

<%!
  String[] names = { "Joe", "Rosy", "Sissi", "Sun" };
  int[]    ages  = {29, 8, 6, 5};
%>

<HTML>
  <HEAD><TITLE>JSTL 'forEach' tag</TITLE></HEAD>
  <BODY>
    <H1>List of people</H1>
    <TABLE BORDER="1">
      <TH>Name</TH>
      <c-rt:forEach var="person" items="<%= names %>">
        <TR>
          <TD><c:out value="${person}"  /></TD>
          <TD><c:out value="${ages[i]}" /></TD>
        </TR>
      </c-rt:forEach>
    </TABLE>
  </BODY>
</HTML>

e o que saiu foi:

List of people
Name 
${person} ${ages[i]} 
${person} ${ages[i]} 
${person} ${ages[i]} 
${person} ${ages[i]}

Sera que configurei algo errado????? :cry:

N

Para que que o JSTL funcione corretamente você tem que especificar que a versão do servlet é 2.4 ou superior…
Se não, não funciona mesmo!!!

Dá uma olhada no arquivo web.xml e veja se está assim

<?xml version="1.0" encoding="ISO-8859-1"?> <web-app 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" version="2.4">

Se não estiver muda a versão e depois testa denovo e nos avisa se resolveu ou não!

S
Para que que o JSTL funcione corretamente você tem que especificar que a versão do servlet é 2.4 ou superior... 
Se não, não funciona mesmo!!!  uma olhada no arquivo web.xml e veja se está assim 

Code:

<?xml version="1.0" encoding="ISO-8859-1"?>
 <web-app 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 <a href="http://java.sun.com/xml/" target="_blank" rel="nofollow">http://java.sun.com/xml/</a>
 ns/j2ee/web-app_2_4.xsd"
     version="2.4">


Se não estiver muda a versão e depois testa denovo e nos avisa se resolveu ou não!

Meu web.xml não ta com esse cabeçalho, tentei mudar e da uma serie de erros relacionados ao name space "xmlns"!! Não sei o que fazer!

S
Acredito que o problema possa estar em vc não estar habilitado no uso de EL, experimente na diretiva page de sua página incluir i 


Code:

isELignored="false"

Tentei mudar a diretiva incluindo essa propriedade, mas tbm deu erro! Não reconhece a diretiva!...

:(

Obrigado a todos e aguardo mais sugestões.

V
<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" isELIgnored="false"%>
G

nicoweda:
Para que que o JSTL funcione corretamente você tem que especificar que a versão do servlet é 2.4 ou superior…
Se não, não funciona mesmo!!!

Cuidado, $ eh Expression language, nao eh jstl. Sao duas coisas distintas. Nada a ver uma com a outra hoje em dia. Antigamente (ate 2 anos atras) sim.

Expression language so surgiu junto com a servlet api 2.4. Portanto eh natural que se voce manter 2.3 ou anterior, o seu servidor nao dara suporte como ele da no 2,4

S

eeeee :smiley: to flix!!!

bem aki no trampo funcionou colocando a diretiva, em casa nao tinha funcionado…deu certinho… depois de algumas semanas posso tentar continuar meu projetinho até o próximo problema! quer dizer…se em casa funcionar… :stuck_out_tongue:

obrigado a todos

D

Galera, perdoem por eu tirar do tumulo esse tópico desde 2006 kkkk

mas é que ja esta mto bem esclarecido. E é apenas um detalhe que eu preciso.

Eu adicionei a parte

e deu o erro quando eu fui publicar “did not find a child translator for jsp-property-group”

e depois um log enorme.

Oque pode ser?

J

Acredito que o problema possa estar em vc não estar habilitado no uso de EL, experimente na diretiva page de sua página incluir i

Criado 4 de setembro de 2006
Ultima resposta 5 de set. de 2006
Respostas 10
Participantes 7