madv
Abril 11, 2017, 1:20pm
#1
Apostila Caelum FJ21 - 9.9 - Exercícios: Lógica para alterar contatos(Lista Vazia)
Estou iniciando em java e estou seguindo a apostila da Caelum e estou com problemas no exercício 9.9 Lógica para Listar contatos - A lista na página “lista-contatos” está vazia. Alquem pode me ajudar?
Segue o código…
Classe Controladora
/**
* Servlet implementation class ControllerServlets
*/
@WebServlet("/mvc")
public class ControllerServlets extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String parametro = req.getParameter("logica");
String nomeDaClasse = "br.com.listagens.mvc.logica." + parametro;
try {
Class classe = Class.forName(nomeDaClasse);
Logica logica = (Logica) classe.newInstance();
String pagina = logica.executa(req, resp);
req.getRequestDispatcher(pagina).forward(req, resp);
} catch (Exception e) {
throw new ServletException("A lógica de negócios causou uma exceção", e);
}
}
}
Remove Contatos
public class RemoveAlunosLogic implements Logica{
public String executa(HttpServletRequest req, HttpServletResponse res)
throws Exception {
int id = Integer.parseInt(req.getParameter("id"));
Aluno aluno = new Aluno();
aluno.setId(id);
AlunoDao alunoDao = new AlunoDao();
alunoDao.removeAluno(aluno);
System.out.println("Excluindo Aluno... ");
return "mvc?logica=ListaAlunosLogic";
}
}
Classe Lista contatos
public class ListaAlunosLogic implements Logica{
public String executa(HttpServletRequest req, HttpServletResponse resp) throws Exception {
ArrayList<Aluno> alunos = new AlunoDao().getListarAlunos();
req.setAttribute("Alunos", alunos);
return "nova-lista.jsp";
}
}
Classe Lista-contatos
<title>Alunos Cadastrados</title>
</head>
<body>
<c:import url="cabecalho.jsp" />
<!-- cria o DAO -->
<table border="1">
<!-- percorre contatos montando as linhas da tabela -->
<tr>
<th>Nome</th>
<th>Data Nasc</th>
<th>Email</th>
<th>Telefone</th>
<th>Endereço</th>
<th>Remover</th>
</tr>
<c:forEach var="aluno" items="${alunos}">
<tr>
<td>${aluno.nome}</td>
<td><fmt:formatDate value="${aluno.datanasc.time}"
pattern="dd/MM/yyyy" /></td>
<td>
<c:if test="${not empty aluno.email}">
<a href="malito:{alunno.email}"> ${aluno.email} </a>
</c:if> <c:if test="${empty aluno.email}">
Email não informado!
</c:if>
</td>
<td>${aluno.telefone}</td>
<td>${aluno.endereco}</td>
<td>
<a href="mvc?logica=RemoveAlunosLogic&id=${aluno.id}">Remover</a></a>
</td>
</tr>
</c:forEach>
</table>
<c:import url="rodape.jsp" />
</body>
</html>
Observação: os nomes das classes e dos dados estão diferentes por opção, mas, a lógica é a mesma da apostila. Não consigo entender onde está o erro, se eu instanciar a classe DAO
da forma antiga (<jsp:useBean id="dao" class="br.com.caelum.agenda.dao.ContatoDao" />
) os dados são listados corretamente.
Olá,
a lista está vindo da AlunoDao?
Poste o código desta classe então, pra ver se o problema é la.
madv
Abril 11, 2017, 1:48pm
#3
Olá Rodrigo_Void,
public ArrayList getListarAlunos(){
try {
ArrayList<Aluno> listadeAlunos = new ArrayList<Aluno>();
String sqlList = "select * from alunos";
PreparedStatement stm = (PreparedStatement) connection.prepareStatement(sqlList);
ResultSet rs = (ResultSet) stm.executeQuery();
while (rs.next()) {
Aluno aluno = new Aluno();
aluno.setId(rs.getInt("id"));
aluno.setNome(rs.getString("nome"));
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("datanasc"));
aluno.setDatanasc(data);
aluno.setEmail(rs.getString("email"));
aluno.setTelefone(rs.getString("telefone"));
aluno.setEndereco(rs.getString("endereco"));
listadeAlunos.add(aluno);
}
rs.close();
stm.close();
return listadeAlunos;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void removeAluno(Aluno aluno){
String sqlRemove = "delete from alunos where id=?";
try {
PreparedStatement stm = (PreparedStatement) connection.prepareStatement(sqlRemove);
stm.setInt(1, aluno.getId());
stm.execute();
stm.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
Segue os métodos, ListarAlunos e RemoverAlunos.
madv
Abril 11, 2017, 1:55pm
#4
<jsp:useBean id="dao" class="br.com.listagens.dao.AlunoDao" />
<table border="1">
<!-- percorre contatos montando as linhas da tabela -->
<tr>
<th>Nome</th>
<th>Data Nasc</th>
<th>Email</th>
<th>Telefone</th>
<th>Endereço</th>
<th>Remover</th>
</tr>
<c:forEach var="aluno" items="${dao.listarAlunos}">
<tr>
<td>${aluno.nome}</td>
<td><fmt:formatDate value="${aluno.datanasc.time}"
pattern="dd/MM/yyyy" /></td>
e etc… FUNCIONA PERFEITAMENTE! Consigo listar, excluir e tudo mais.
Porém, quando retiro a instancia da classe Dao e coloco a lista passada na classe ListaAlunosLogic anteriormente mostrada, a página não mostra mais a lista, só a tabela vazia.
<!-- percorre contatos montando as linhas da tabela -->
<tr>
<th>Nome</th>
<th>Data Nasc</th>
<th>Email</th>
<th>Telefone</th>
<th>Endereço</th>
<th>Remover</th>
</tr>
<c:forEach var="aluno" items="${alunos}">
etc…
Tenta trocar
req.setAttribute("Alunos", alunos);
por
req.setAttribute("alunos", alunos);
madv
Abril 11, 2017, 2:27pm
#6
Rodrigo_Void,
Valew cara, aparentemente era isso mesmo!
Quando alterei “Alunos” para “alunos” a lista apareceu.
Muita falta de atenção e experiência da minha parte, mas mto obrigado mesmo!
Vou tentar ter mais atenção e redobrar os estudos. Foco total! valew msm e até a próxima!!!
Estou reabrindo o forum, pois no meu caso ta igual a vc. Mas nao roda. Pode me ajudar?
Classe ControllerServlet
package br.com.caelum.mvc.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.caelum.mvc.logica.Logica;
@WebServlet("/mvc")
public class ControllerServlet extends HttpServlet {
protected void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String parametro = request.getParameter("logica");
String nomeDaClasse = "br.com.caelum.mvc.logica." + parametro;
try {
Class classe = Class.forName(nomeDaClasse);
Logica logica = (Logica) classe.newInstance();
String pagina = logica.executa(request, response);
request.getRequestDispatcher(pagina).forward(request, response);
} catch (Exception e) {
throw new ServletException("A lógica de negócios causou uma exceção", e);
}
}
}
Remover Contatos
package br.com.caelum.mvc.logica;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.caelum.agenda.dao.ContatoDao;
import br.com.caelum.agenda.modelo.Contato;
public class RemoveContatoLogic implements Logica {
public String executa(HttpServletRequest req, HttpServletResponse res)
throws Exception {
long id = Long.parseLong(req.getParameter("id"));
Contato contato = new Contato();
contato.setId(id);
ContatoDao dao = new ContatoDao();
dao.remove(contato);
System.out.println("Excluindo contato...");
return "lista-contatos.jsp";
}
}
Classe ListaContatosLogic
package br.com.caelum.mvc.logica;
import java.awt.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.caelum.mvc.logica.Logica;
import br.com.caelum.agenda.dao.ContatoDao;
import br.com.caelum.agenda.modelo.Contato;
public class ListaContatosLogic implements Logica {
public String executa(HttpServletRequest req, HttpServletResponse res)
throws Exception {
List<Contato> contatos = new ContatoDao().getLista();
req.setAttribute("contatos", contatos);
return "lista-contatos.jsp";
}
}
Lista Contatos.jsp
<%@ page import="br.com.caelum.agenda.modelo.Contato"%>
<%@ page import="br.com.caelum.agenda.dao.ContatoDao"%>
<%@ page import="java.awt.List"%>
<%@ page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<!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 Contatos</title>
</head>
<body>
<c:import url="cabecalho.jsp"></c:import>
<%-- <jsp:useBean id="dao" class="br.com.caelum.agenda.dao.ContatoDao"/> --%>
<table align='center' cellspacing=2 cellpadding=5 border=1>
<tr style="background: #e6e6fa">
<th>ID</th>
<th>Nome</th>
<th>Email</th>
<th>Endereço</th>
<th>Data de Nascimento</th>
</tr>
<%-- <c:forEach var="contato" items="${dao.lista }"> --%>
<c:forEach var="contato" items="${contatos }">
<tr>
<td>${contato.id }</td>
<td>${contato.nome }</td>
<td>
<c:if test="${not empty contato.email }">
<a href="mailto:${contato.email}">${contato.email }</a>
</c:if>
<c:if test="${empty contato.email }">
Email não informado
</c:if>
</td>
<td>${contato.endereco }</td>
<td align="center"><fmt:formatDate value="${contato.dataNascimento.time }" pattern="dd/MM/yyyy"/></td>
<td><a href ="mvc?logica=RemoveContatoLogic&id=${contato.id}">Remover</a></td>
</tr>
</c:forEach>
</table>
<c:import url="rodape.jsp"/>
</body>
</html>
O que há algo errado?
Se o caso é igual, a solução está ai pra cima.
Se não é igual aqui não é lugar, cria seu tópico.