Boa noite amigos do GUJ, estou aqui para pedir mais uma ajuda, pois sou iniciante em desenvovimento WEB e estou tendo problemas na TAG <c:forEach var="contato" items="${*********}">
Bem onde estão os ASTERISCOS como mostrado no FOREACH não estou conseguindo colocar a lista de contatos.
Vou colocar a classe toda para vcs terem uma noção maior do problema.
SE ALGUEM PUDER ME AJUDAR, FAVOR RESPONDA.
<%@page import="br.com.PROJECT_JSP.BONEGOCIO.ContatoBO"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.*,br.com.PROJECT_JSP.DAO.DAOContatos,br.com.PROJECT_JSP.MODELO.Contato"%>
<!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>Lista de Contatos</title>
</head>
<body>
<%-- cria o BOContato --%>
<jsp:useBean id="boContato" class="br.com.PROJECT_JSP.BONEGOCIO.ContatoBO"/>
<table>
<%--percorre contatos montando as linhas da tabela --%>
<c:forEach var="contato" items="${}">
</c:forEach>
</table>
</body>
</html>
Notem que o <c:forEach var="contato" items="${}"> esta sem a parte do items, portanto é bem isso ai que não esta funcioando, pois quando eu coloco (items="${boContato.getLista}") para me trazer a lista da classe BO que esta responsavel por me dar a lista da CLASSE DAO....... é bem ai o erro, o items não consegue enxergar "${boContato.getLista}".
Se alguem puder me ajudar.... concerteza estarei a espera da alternativa.
Abraços galera.
[RESOLVIDO] ERRO NA TAG <c:forEach var="contato" items="${}">
8 Respostas
tente:
<c:forEach var="contato" items="${boContato.lista}">
</c:forEach>
tente:
<c:forEach var="contato" items="${boContato.lista}"> </c:forEach>
Mais é bem isso que eu quero dizer meu amigo, quando eu coloco esse metodo dentro do items do foreach, ele não recomnhece… isso que estou achando estranho… sendo que ja importei tudo…
Voce testou:
<c:forEach var="contato" items="${boContato.lista}">
</c:forEach>
Ou:
<c:forEach var="contato" items="${boContato.geLista}">
</c:forEach>
?
Voce testou:
<c:forEach var="contato" items="${boContato.lista}"> </c:forEach>Ou:
<c:forEach var="contato" items="${boContato.geLista}"> </c:forEach>?
Testei sim…
Vou tentar explicar como esta meu projeto.
Meu projeto esta dividido em 3 PACOTES.
1 - pacote (DAO)
2 - pacote (BO)
3 - pacote (MODELO)
Ou seja o pacote MODELO é o espelho do BD (banco de dados), o pacote BO é o responsavel por fazer a busca no DAO ou seja, na classe BO eu tenho um objeto instaciado da CLASSE DAO, e com esse OBJETO eu consigo ter acesso em todos os metodos da CLASSE DAO.
Portanto na CLASSE DAO EU tenho os METODOS (adicionaContato, excluiContato, listaContato, editaContato), e na classe BO EU TENHO um metodo chamado (recuperaContato que retorna uma lista do metodo listaContato da classe DAO).
Para vc entender melhor é assim.
CLASSE BO.
package br.com.PROJECT_JSP.BONEGOCIO;
import java.util.List;
import br.com.PROJECT_JSP.DAO.DAOContatos;
import br.com.PROJECT_JSP.MODELO.Contato;
public class ContatoBO {
private DAOContatos contatoDAO;
public DAOContatos getContatoDAO() {
if (contatoDAO == null) {
contatoDAO = new DAOContatos();
}
return contatoDAO;
}
public void setContatoDAO(DAOContatos contatoDAO) {
this.contatoDAO = contatoDAO;
}
public List<Contato> listarContatos(){
return getContatoDAO().retornaContatos();
}
}
CLASSE DAO.
package br.com.PROJECT_JSP.DAO;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import br.com.PROJECT_JSP.MODELO.Contato;
public class DAOContatos {
private Connection connection = null;
private PreparedStatement stmt = null;
private String URL_BANCO = "jdbc:mysql://localhost:3306/webproject";
private String USER_BANCO = "root";
private String SENHA_BANCO = "123456";
private String DRIVER_BANCO = "com.mysql.jdbc.Driver";
public void adicionaContato(Contato contato){
String sql = "insert into webContatos(nome, endereco, email, dataNascimento) values(?, ?, ?, ?)";
try {
Class.forName(DRIVER_BANCO);
connection = DriverManager.getConnection(URL_BANCO, USER_BANCO, SENHA_BANCO);
stmt = connection.prepareStatement(sql);
stmt.setString(1, contato.getNome());
stmt.setString(2, contato.getEndereco());
stmt.setString(3, contato.getEmail());
stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
stmt.execute();
} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
connection.close();
stmt.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
public List<Contato> retornaContatos(){
List<Contato> listaContato = new ArrayList<Contato>();
String sql = "select * from webContatos";
try {
Class.forName(DRIVER_BANCO);
connection = DriverManager.getConnection(URL_BANCO, USER_BANCO, SENHA_BANCO);
stmt = connection.prepareStatement(sql);
ResultSet rst = stmt.executeQuery(sql);
while (rst.next()) {
Contato c = new Contato();
c.setId(new Long(rst.getObject(1).toString()));
c.setNome(rst.getObject(2).toString());
c.setEndereco(rst.getObject(3).toString());
c.setEmail(rst.getObject(4).toString());
//c.setDataNascimento(Calendar(rst.getObject(5)));
listaContato.add(c);
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
connection.close();
stmt.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return listaContato;
}
}
PAGE JSP QUE ESTA DANDO O PROBLEMA.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<!-- cria o BO -->
<jsp:useBean id="boContato" class="br.com.PROJECT_JSP.BONEGOCIO.ContatoBO" />
<table>
<!-- percorre contatos montando as linhas da tabela -->
<c:forEach var="contato" items="${boContato.listarContatos}">
<tr>
<td>${contato.nome}</td>
<td>${contato.email}</td>
<td>${contato.endereco}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Nessa PAGE JSP ali dentro do ITEMS onde tem aquele metodo que vai até O METODO listarContatos() da classe BO que retorna uma lista da CLASSE DAO, e ele que esta dando problema, quando ele coloco ele dentro do items do forEach, o mesmo não é reconhecido.
Estarei no aguardo de uma resposta.
Desde ja agradeço.
Faça apenas isso: mude o nome do seu méodo ‘listarContatos’ em ContatoBO para ‘getListarContatos’. No jsp deixe ‘${boContato.listarContatos}’.
Nossa BROTHER era isso mesmo, mais será que vc poderia me dizer o porque disso.
Tudo bem que quando eu aperto CTRL + ESPAÇO não aparece a lista de opções da classe BO, mas, mesmo assim colocando do jeito que vc disse pra colocar deu certinho… será que vc poderia me explicar.
Desde ja grato AMIGÃO… muito obrigado mesmo.
Diga aew campeão. A questão é a seguinte, Expression Language(EL) trabalha seguindo a especificação JavaBeans, a qual padroniza o acesso a membros de classes via padrão ‘get’ e ‘set’. Ou seja, se você tem um atributo ‘nome’ na sua classe, ele será privado e será acessível via métodos públicos ‘getNome’ e ‘setNome’. Para você acessar esse cara via EL você faria ‘${objeto.nome}’, implicitamente o método ‘getNome’ estaria sendo chamado.
Logo, quando você quer chamar um método de uma classe via EL é necessário que ele continue seguindo essa especificação. Método ‘getListarContatos’ será acessível via EL com ‘${objeto.listarContatos}’.
Basicamente é isto, existem outros conceitos a serem abordados, mas com o tempo você irá se familiarizando.
Abraço.
Só para registrar: Estava com a mesma dúvida e esse posta me salvou.
Muito obrigado!