Pessoal estou estudando pela apostila FJ21 da Caelum. Estou no capitulo que fala de Filtros e WAR. Nessa parte do exercício ele fala lá que para a gente abrir a conexão em um filtro e passá-la para a servlet para depois poder fechar a connection no filtro. Nisso, meu DAO passa a receber uma connection que eu passo pela servlet.
O problema é o seguinte: Para inserir, editar e adicionar está ok, mas a listagem, como é feita só com JSP e JSTL não funciona. Não como chamaria a conexao que é criada no filtro nem como passá-la para o DAO usando JSP ou JSTL.
Alguém poderia me ajudar.
Código do filtro que cria a conexão:
[code]package br.com.caelum.agenda.filtro;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import br.com.caelum.jdbc.ConnectionFactory;
public class FiltroConexao implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
Connection connection = new ConnectionFactory().getConnection();
//pendurando a connection na requisição
request.setAttribute("conexao", connection);
chain.doFilter(request, response);
connection.close();
} catch (SQLException e) {
throw new ServletException(e);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
[/code]
Código da Listagem:
[code]<%@page import=“br.com.caelum.jdbc.dao.ContatoDao”%>
<%@page import=“br.com.caelum.jdbc.modelo."%>
<%@page import="java.util.”%>
<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<%@taglib uri=“http://java.sun.com/jsp/jstl/fmt” prefix=“fmt”%>
<c:import url=“cabecalho.jsp” />
<!-- Cria o DAO -->
<jsp:useBean id=“dao” class=“br.com.caelum.jdbc.dao.ContatoDao” />
<table cellpadding=“5px”>
<tr bgcolor="#000000">
<td><span style=“color: white; font-weight: bold;”>Excluir</span>
</td>
<td><span style=“color: white; font-weight: bold;”>Editar</span>
</td>
<td><span style=“color: white; font-weight: bold;”>Nome</span></td>
<td><span style=“color: white; font-weight: bold;”>Email</span></td>
<td><span style=“color: white; font-weight: bold;”>Endereço</span>
</td>
<td><span style=“color: white; font-weight: bold;”>Data de
Nascimento</span></td>
</tr>
<!-- Percorre contato montando as linhs da tabela -->
<c:forEach var=“contato” items="${dao.lista}" varStatus=“id”>
<tr bgcolor="${(id.count % 2) == 0? ‘#F5F5F5’ : ‘#DCDCDC’ }">
<td>Editar</td>
<td>Excluir</td>
<td>${contato.nome}</td>
<td><c:choose>
<c:when test="${not empty contato.email}">
${contato.email}
</c:when>
<c:otherwise>
Email não informado
</c:otherwise>
</c:choose></td>
<td>${contato.endereco}</td>
<td><fmt:formatDate value="${contato.dataNascimento.time}" pattern=“dd/MM/yyyy” />
</td>
</tr>
</c:forEach>
</table>
<c:import url=“rodape.jsp” />[/code]
É possível fazer isso, ou o único modo é colocar uma servlet antes da listagem?!