[RESOLVIDO]JSP "puro" para JSTL

Alguém sabe me dizer como posso fazer a mesma coisa que o código abaixo faz de uma maneira mais eficiente?

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.util.List" %>
<%@page import="modelo.Produto" %>
<% List<Produto> produtos = (List<Produto>)request.getAttribute("listaprod"); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<table>
		<tr>  
            <td>Produto</td>   <td>Quantidade</td>  
       </tr>  
       <tr> <%for(Produto p : produtos) { %>
  						<td><%=p.getNome()%></td>
  						<td><%=p.getQuant()%></td>
  		</tr>
  			<% } %>
	</table>
	
	
</body>
</html>

[code] <%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jstl/core” prefix=“c” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>
<title>Insert title here</title>
</head>
<body>

    &lt;table&gt;  
        &lt;tr&gt;    
            &lt;td&gt;Produto&lt;/td&gt;   &lt;td&gt;Quantidade&lt;/td&gt;    
       &lt;/tr&gt;    
       
       &lt;c:forEach var="produto" items="${produtos}"&gt;
              &lt;tr&gt;
                     &lt;td&gt;${produto.nome}&lt;/td&gt;
                     &lt;td&gt;${produto.quant}&lt;/td&gt;
              &lt;/tr&gt;
       &lt;/c:forEach&gt;
          
    &lt;/table&gt;  
      
      
&lt;/body&gt;  
&lt;/html&gt;[/code]

Infelizmente não funcionou. Não entendi como o forEach pega a lista que vem do request.

Qual o erro que aconteceu?

Para passar a lista, usei ‘items’ da tag de JSTL.

Então usei Expression Language (procure estudar sobre isso) para pegar o que vem epla requisição. Como eu só coloquei o nome, automaticamente ele procura na sessão, requisição, aplicação… até encontrar a variável com aquele nome. Então eu simplesmente mando pegar as propriedades do bean em ${produto.nome}, por exemplo. Para isso funcionar, deve haver um getNome().

Obrigado pela atenção Fernando. No servlet tenho o codigo:

		 if (cmd.equals("listaprod")) {
			 List<Produto> lista = null;
			 ProdutoDAO pDAO = new ProdutoDAO();
			 lista = pDAO.lista();
			 request.setAttribute("listaprod", lista);
			 RequestDispatcher rd = request.getRequestDispatcher("produtos.jsp");
			 rd.forward(request, response);
			 for (Produto p: lista) {
				 System.out.println(p.getNome());
			 }

E no JSP está assim:

	<table>
		<tr>  
            <td>Produto</td>   <td>Quantidade</td>  
       </tr>  
         
       <c:forEach var="produto" items="listaprod">  
              <tr>  
                     <td>${produto.getNome}</td>  
                     <td>${produto.getQuant}</td>  
              </tr>  
       </c:forEach>  
	</table>

Pode me dizer o que está faltando?

[quote=ressacaafu]Obrigado pela atenção Fernando. No servlet tenho o codigo:

		 if (cmd.equals("listaprod")) {
			 List<Produto> lista = null;
			 ProdutoDAO pDAO = new ProdutoDAO();
			 lista = pDAO.lista();
			 request.setAttribute("listaprod", lista);
			 RequestDispatcher rd = request.getRequestDispatcher("produtos.jsp");
			 rd.forward(request, response);
			 for (Produto p: lista) {
				 System.out.println(p.getNome());
			 }

E no JSP está assim:

	<table>
		<tr>  
            <td>Produto</td>   <td>Quantidade</td>  
       </tr>  
         
       <c:forEach var="produto" items="listaprod">  
              <tr>  
                     <td>${produto.getNome}</td>  
                     <td>${produto.getQuant}</td>  
              </tr>  
       </c:forEach>  
	</table>

Pode me dizer o que está faltando?[/quote]

O erro está no ‘items’ e nas EL de produto. Troca items=“listaprod” por items="${listaprod}", ${produto.getNome} por ${produto.nome} e ${produto.getQuant} por ${produto.quant}.
Você só precisa colocar o nome da variável, que o EL detecta o gettter.
Qualquer coisa, pode postar novamente. :slight_smile:

Devo estar errando em algum detalhe, sai o seguinte erro: HTTP Status 500,
org.apache.jasper.JasperException: /produtos.jsp(19,7) According to TLD or attribute directive in tag file, attribute items does not accept any expressions

Olha esse site aqui: http://lkamal.blogspot.com/2007/03/jstl-according-to-tld-or-attribute.html

Basicamente, há uma incompatibilidade entre seu JSTL e sua versão de Servlet e JSP.

Azar de principiante hehe. Valeu pelas dicas.

E agora, o que faço? Preciso atualizar os jars do JSTL? Esse é o cabeçalho do meu web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

Pelas versões do seu cabeçalho do web.xml, acho que você precisa atualizar o JSTL mesmo. E você está com as 2 libs?

Tenho essas:
jstl.jar
jstl-api-1.2.jar
jstl-impl-1.2.jar

sabe quais devo usar?

Bom… que eu saiba, geralmente eh uma jstl-1.2.jar e uma standard.jar.
Ai parece estar faltando a standard.jar.

No NetBeans tá funcionando \o/.

auwehwauehwaeuwa
O NetBeans importa automaticamente as bibliotecas.
Copia jstl.jar e standard.jar que tem no seu netbeans pro Eclipse, q funciona também.