Ao realizar um cadastro no sistema se eu atualizar
a página ele cadastra a mesma informação novamente com
um id diferente, fiz um sistema de cadastro em java web
usando JSP ele está cadastrando certinho os dados porém
ao fazer um cadastro e apertar f5 ele grava o mesmo dado
novamente com outro ID , alguém pode me ajudar ?
Após o cadastro, vc deve está fazendo um forward para outra página. Tente fazer um redirect (response.sendRedirect) após o cadastro, que deve resolver.
Cheguei a fazer o teste com o ( response.sendRedirect ), mas não posso usar ele porque estou passando parametros no meu RequestDispacher e sem ele outras funcionalidades não funciona acho que vou ter que criar um metodo no java que resolva isso, porém tenho que descobrir qual.
Tem como mandar a declaração do form da sua jsp? E no seu servlet, o código que processo o form está no doGet ou doPost?
Veja como solucionar:
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>${msg}</p>
<form action="postRedirectGetServlet" method="post">
<button>Enviar</button>
</form>
</body>
</html>
Servlet
@WebServlet("/postRedirectGetServlet")
public class PostRedirectGetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Nessa parte, vc pega o ID do usuário criado e obtém os dados do mesmo no banco para apresentar na tela, se necessário
String idRegistroCadastrado = request.getParameter("idRegistroCadastrado");
request.setAttribute("msg", "Usuário criado com o ID: " + idRegistroCadastrado);
request.getRequestDispatcher("cadastro.jsp").forward(request, response);
}
/*
* Esse doPost é responsável por criar o registro no sistema
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int idRegistroCadastrado = 1; // aqui processa o cadastro e obtém o ID criado no banco
// Fazendo assim, vai retornar para a página de cadastro e, se o usuário atualizar a página, vai reexecutar o submit do form
// **Descomente esse forward e comente o redirect para testar**
//request.setAttribute("msg", "OK");
//request.getRequestDispatcher("cadastro.jsp").forward(request, response);
// Dessa outra forma, o redirecionamento será feito para esse mesmo servlet,
// porém, caíndo no doGet que irá enviar para a página de cadastro.
// Só que se o usuário atualizar a página, o form não será reenviado, pois houve um redirect no meio da operação
response.sendRedirect("postRedirectGetServlet?idRegistroCadastrado=" + idRegistroCadastrado);
}
}
Sim estou enviando minha Servlet, para você dar uma olhada
estou utilizando nos formularios apenas o method POST,
porem na minha Servlet estou usando o post e get para passar parametros, porém consegui resolver utilizando um metodo que não deixa eu inserir nomes que já existe cadastrado
package servlets;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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 beans.VisitanteBean;
import daos.CadastrarVisitanteDao;
@WebServlet("/pages/VisitanteServlet")
public class VisitanteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public VisitanteServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// PARAMETROS PARA REALIZAR AÇÕES DE ELETAR ATUALIZAR E EXCLUIR E PESQUISAR
CadastrarVisitanteDao dao = new CadastrarVisitanteDao();
String acao = request.getParameter("acao");
String usuario = request.getParameter("usuario");
if (acao.equalsIgnoreCase("deletar")) {
dao.deletarVisitante(usuario);
RequestDispatcher dispatcher = request.getRequestDispatcher("cadastrovisitante.jsp");
request.setAttribute("visitantes", dao.listarVisitante());
dispatcher.forward(request, response);
} else if (acao.equalsIgnoreCase("listartodos")) {
dao.listarVisitante();
RequestDispatcher dispatcher = request.getRequestDispatcher("cadastrovisitante.jsp");
request.setAttribute("visitantes", dao.listarVisitante());
dispatcher.forward(request, response);
} else if (acao.equalsIgnoreCase("editar")) {
VisitanteBean visitante = dao.consultarAtualizarVisitante(usuario);
RequestDispatcher dispatcher = request.getRequestDispatcher("cadastrovisitante.jsp");
request.setAttribute("usuario", visitante);
dispatcher.forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// AQUI COMEÇA O CÓDIGO PARA IMPLEMENTAR O METODO DE SALVAR VISITANTE ATUALIZAR E VALIDAR
String id = request.getParameter("id");
String nome = request.getParameter("nome");
String cpf = request.getParameter("cpf");
String rg = request.getParameter("rg");
String telefone = request.getParameter("telefone");
String datetime = request.getParameter("datetime");
String destino = request.getParameter("destino");
String motivo = request.getParameter("motivo");
String foto = request.getParameter("foto");
String typefoto = request.getParameter("typefoto");
CadastrarVisitanteDao dao = new CadastrarVisitanteDao();
VisitanteBean visitante = new VisitanteBean();
visitante.setId(!id.isEmpty() ? Long.parseLong(id) : 0);
visitante.setNome(nome);
visitante.setCpf(cpf);
visitante.setRg(rg);
visitante.setTelefone(telefone);
visitante.setDatetime(datetime);
visitante.setDestino(destino);
visitante.setMotivo(motivo);
visitante.setFoto(foto);
visitante.setTypefoto(typefoto);
if (id == null || id.isEmpty() && dao.consultarVisitanteRepetido(cpf) ) {
dao.cadastrarVisitante(visitante);
} else {
dao.atualizarVisitante(visitante);
}
// AQUI TERMINA O CÓDIGO PARA IMPLEMENTAR O METODO DE SALVAR VISITANTE ATUALIZAR E VALIDAR
}
catch (Exception e) {
e.printStackTrace();
}
// AQUI COMEÇA O CÓDIGO PARA VISUALIZAR OS VISITANTES CADASTRADOS
try {
CadastrarVisitanteDao dao = new CadastrarVisitanteDao();
RequestDispatcher view = request.getRequestDispatcher("cadastrovisitante.jsp");
request.setAttribute("visitantes", dao.listarVisitante());
view.forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
// AQUI TERMINA O CÓDIGO PARA VISUALIZAR OS VISITANTES CADASTRADOS
}
}