Registros duplicados

Pessoal, minha aplicação tem um problema que se manifesta na seguinte situaçao:
1- Usuario informa os dados do cadastro e faz o submit.
2- Servlet faz o insert na tabela e redireciona para uma pagina de listagem do cadastro.
3- Pagina de listagem exibe o cadastro.

Agora o problema:
4- Usuário faz um refresh na pagina de listagem e o formulário é submetido novamente duplicando o registro.

Como evitar esse problema? Como limpar o request? Alguma idéia?

Como vc está redirecionando do servlet para a página que mostra o cadastro?

Bruno,
segue um trecho do codigo.
Onde rq é o objeto request.

	if(i.incluir(e)){ [b]// AQUI O INSERT NO BANCO[/b]
		ListarEntidades l = new ListarEntidades();
		List<Entidade> lista = l.getEntidades(e.getId(),e.getDescricao()); [b]// AQUI CARREGA UMA LIST COM ENTIDADES[/b]
		rq.setAttribute("entidade",lista );[b] // SETA UM ATRIBUTO COM A LISTA[/b]
		RequestDispatcher rd = rq.getRequestDispatcher("/listarEntidades.jsp"); 
		rd.forward(rq, rs); [b]// DIRECIONA PARA A PAGINA DE LISTAGEM[/b]
	}else{
		RequestDispatcher rd = rq.getRequestDispatcher("/WEB-INF/erro.jsp");
		rd.forward(rq, rs);
	}

[quote=tolosa]Bruno,
segue um trecho do codigo.
Onde rq é o objeto request.

	if(i.incluir(e)){ [b]// AQUI O INSERT NO BANCO[/b]
		ListarEntidades l = new ListarEntidades();
		List<Entidade> lista = l.getEntidades(e.getId(),e.getDescricao()); [b]// AQUI CARREGA UMA LIST COM ENTIDADES[/b]
		rq.setAttribute("entidade",lista );[b] // SETA UM ATRIBUTO COM A LISTA[/b]
		RequestDispatcher rd = rq.getRequestDispatcher("/listarEntidades.jsp"); 
		rd.forward(rq, rs); [b]// DIRECIONA PARA A PAGINA DE LISTAGEM[/b]
	}else{
		RequestDispatcher rd = rq.getRequestDispatcher("/WEB-INF/erro.jsp");
		rd.forward(rq, rs);
	}

[/quote]

Pô, esta parada está num doPost ou num doGet?

Outra, não faça um cara que inclua e busque no mesmo servlet… tipo, crie um cara que inclua o registro, depois vc redireciona para um que busque e manda pra página…

Blz Bruno.

doPost.

Tanto o insert como o select estão numa camada dao. O codigo faz parte de uma classe de controle que só faz redirecionamento de acordo com os resultados das funções… etc…
Será que a idéia de redirecionar para outra servlet que faça o select vai mudar o objeto request? Nesse caso um refresh do browser só deve listar as entidades novamente.

Certo?

[quote=tolosa]Blz Bruno.

doPost.

Tanto o insert como o select estão numa camada dao. O codigo faz parte de uma classe de controle que só faz redirecionamento de acordo com os resultados das funções… etc…
Será que a idéia de redirecionar para outra servlet que faça o select vai mudar o objeto request? Nesse caso um refresh do browser só deve listar as entidades novamente.

Certo?[/quote]

Pois é, a ideia é exatamente esta…

Eu sinceramente sempre crio uma página, no caso para listar um cadastro, e esta página que invoca o servlet… dae eu consigo reaproveitar a página numa boa… então o fluxo ficaria…

Página para inserção-> servlet que inclui, e redireciona via response.sendredirect-> página que lista e inclui o servlet via jsp:include/->servlet que recupera e inclui na request, dae a página pode tratar de mostrar…

Desta forma a página que lista o cadastro pode ser reaproveitada… tipo, se vc quizer listar o cadastro sem incluir nada, só invocar a página… sacou?

Vou fazer um teste e depois mando um post do resultado.
Valeu!!!