Problema com filtros

1 resposta
nandooliveira

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:

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 {

	}

}

Código da Listagem:

<%@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' }">
			&lt;td&gt;<a >Editar</a>&lt;/td&gt;
			&lt;td&gt;<a >Excluir</a>&lt;/td&gt;
			&lt;td&gt;${contato.nome}&lt;/td&gt;
			&lt;td&gt;&lt;c:choose&gt;
					&lt;c:when test="${not empty contato.email}"&gt;
						<a href="mailto:${contato.email}">${contato.email}</a>
					&lt;/c:when&gt;
					&lt;c:otherwise&gt;
							Email não informado
					&lt;/c:otherwise&gt;
				&lt;/c:choose&gt;&lt;/td&gt;
			&lt;td&gt;${contato.endereco}&lt;/td&gt;
			&lt;td&gt;&lt;fmt:formatDate value="${contato.dataNascimento.time}" pattern="dd/MM/yyyy" /&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/c:forEach&gt;
&lt;/table&gt;

&lt;c:import url="rodape.jsp" /&gt;

É possível fazer isso, ou o único modo é colocar uma servlet antes da listagem?!

1 Resposta

andreacerqueira

vc conseguiu resolver isso nando?
estou começando nessa apostila agora e estou com o mesmo problema :confused:

Criado 15 de março de 2011
Ultima resposta 27 de abr. de 2012
Respostas 1
Participantes 2