useBean - onde está o erro?

Estou estudando useBean e criei a página abaixo, que não está funcionando.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import="java.util.*, DAO.*, classes.*" %>
<jsp:useBean id="prodDaoBean" class="DAO.ProdDao" scope="session" />
<jsp:useBean id="prodBean" class="classes.Prod" scope="session" />

<!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=ISO-8859-1">
<title>Consulta Produtos </title>
</head>
<body>
	<table>
		<tr>
			<th> Código do produto</th>
			<th> descrição do produto</th>
		</tr>
 	<%
		for (Prod prod : prodDaoBean.consultaTodos()) {
		%>
				<tr> 
					<td> <jsp:getProperty property="codigo" name="prodBean"/> </td>
					<td> <jsp:getProperty property="descricao" name="prodBean"/> </td>
				</tr> 
		<% }%>
	</table>	
</body>
</html>

assim funciona:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import="java.util.*, DAO.*, classes.*" %>
<jsp:useBean id="prodDaoBean" class="DAO.ProdDao" scope="session" />
<jsp:useBean id="prodBean" class="classes.Prod" scope="session" />

<!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=ISO-8859-1">
<title>Consulta produto</title>
</head>
<body>
	<table>
		<tr>
			<th> Código do produto</th>
			<th> descrição do produto</th>
		</tr>
 	<%
		for Prod prod : prodDaoBean.consultaTodos()) {
		%>
				<tr> 
					<td> <%=prod.getCodigo()%> </a> </td>
					<td> <%=prod.getDescricao()%> </td>
				</tr> 
		<% }%>
	</table>	
</body>
</html>

Olá,

No caso que não funciona, provavelmente, é pelo fato do teu bean “prodBean” não conter nada, pois pelo que dá para entender é que no FOR ele não esta sendo populado.

Tente algo parecido com isso…

<%  
        for (prodBean : prodDaoBean.consultaTodos()) {  
        %>  
                <tr>   
                    <td> <jsp:getProperty property="codigo" name="prodBean"/> </td>  
                    <td> <jsp:getProperty property="descricao" name="prodBean"/> </td>  
                </tr>   
        <% }%> 

ou isso

<%  
        for (Prod prod : prodDaoBean.consultaTodos()) {  
        %>  
                <tr>   
                    <td> <jsp:getProperty property="codigo" name="prod "/> </td>  
                    <td> <jsp:getProperty property="descricao" name="prod "/> </td>  
                </tr>   
        <% }%> 

acredito que um desses dois códigos irá te levar a solução. [acredito, pois não consegui testar nada aqui :)].

Abrçs.

Não funciona

Se eu colocar prod aparece o seguinte erro:

jsp:getProperty for bean with name ‘prod’. Name was not previously introduced as per JSP.5.3

	<%
		for (Prod prod : prodDaoBean.consultaTodos()) {
		%>
				<tr> 
					<td> <jsp:getProperty property="codigo" name="prod"/> </td>
					<td> <jsp:getProperty property="descricao" name="prod"/> </td>
				</tr> 
		<% }%>

[quote=rsaforuns]Não funciona

Se eu colocar prod aparece o seguinte erro:

jsp:getProperty for bean with name ‘prod’. Name was not previously introduced as per JSP.5.3

	<%
		for (Prod prod : prodDaoBean.consultaTodos()) {
		%>
				<tr> 
					<td> <jsp:getProperty property="codigo" name="prod"/> </td>
					<td> <jsp:getProperty property="descricao" name="prod"/> </td>
				</tr> 
		<% }%>

[/quote]

e o outro ?

obs.:por curiosidade, vc está usando JSTL ?

dica:http://www.caelum.com.br/curso/fj-21-java-web/

Não estou usando JSTL.

Mas o outro exemplo também não dá. Aparece erro no for:

Syntax error on token “prodBean”, Identifier expected after this token


		<%  
        	for (prodBean : prodDaoBean.consulta_Todos()) {  
        %>  
                <tr>   
                    <td> <jsp:getProperty property="codigo" name="prodBean"/> </td>  
                    <td> <jsp:getProperty property="descricao" name="prodBean" /> </td>  
                </tr>   
        <% }%>  

OK … tente algo assim…

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

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<jsp:useBean id="prodDaoBean" class="DAO.ProdDao" scope="session" />

<!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=ISO-8859-1">
<title>Consulta Produtos </title>
</head>
<body>
	<table>
		<tr>
			<th> Código do produto</th>
			<th> descrição do produto</th>
		</tr>
		<c:forEach var="prod" items="${prodDaoBean.consultaTodos}">
			<tr>
				<td>${prod.codigo}</td>
				<td>${prod.descricao}</td>
			</tr>
		</c:forEach>
	</table>	
</body>
</html>

Tente tbm evitar scriptlet… e a apostila do fj21 da caelum é muito boa… de uma lida nela.

Está apresentando um aviso: Invalid attribute (items).
<c:forEach var=“prod” items="${prodDaoBean.consultaTodos}">

Esta consulta, funciona em outro jsp, sem usar o useBean / JSTL, fazendo um for comum.

Na classe DAO:


		public List<Produtos> consulta_geral() throws SQLException {
		    try {
		    		lista_prod = new ArrayList<Produtos>();
			        stm = ConectaBD.getConnection().createStatement();
			        PreparedStatement pstmt = stm.getConnection().prepareStatement("select * from produtos order by descricao");
			        ResultSet rs = pstmt.executeQuery();
			   		while (rs.next()) {
			   			Produtos prod = new Produtos();
		        	                prod.setCodigo(rs.getInt("codigo"));
			   			prod.setDescricao(rs.getString("descricao"));
			   			lista_prod.add(prod);
			   		}
		        } catch (SQLException ex) {
		        	System.out.println("erro ao consultar geral");
		        } 
		        stm.close();
		   		return lista_prod;
		}

vc está usando …struts , vraptor … ?

tente mudar o nome do método para o padrão do JavaBeans … tendo os getters e setters.

mude o nome do método consultaTodos() para getConsultaTodos().

de uma olhada na apostila do fj21 … que vai esclarecer algumas formas de como utilizar as boas praticas entre outras cosias.

Mudei o método para getLista() no DAO

mas continua com o seguinte erro:
According to TLD or attribute directive in tag file, attribute items does not accept any expressions
<c:forEach var=“prod” items="${prodDaoBean.lista}">
já tentei assim:
<c:forEach var=“prodBean” items="${prodDaoBean.lista}">

No var, tem que ser o id do useBean, ou pode ser outro nome?
<jsp:useBean id=“prodBean” class=“classes.Produtos” scope=“session” />

Mudei para core_rt e funcionou

você esta usando que tipo de ambiente de desenvolvimento ?

Tom-cat … vraptor …struts , quais frames … o que tanto ?

E legal que funcionou :D, parabens!

estou usando o tomcat e o eclipse
Qual a diferença entre o core e o core_rt?

[quote=rsaforuns]estou usando o tomcat e o eclipse
Qual a diferença entre o core e o core_rt?
[/quote]

você deve estar com alguma outro biblioteca do jstl… mas eu não sei dizer o que tanto este core_rt tem … tem que googlear