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?
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…
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.
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?