Bom dia, eu estou com uma lista em JSTL que exibe dados do banco na minha página. Ao lado de cada item da lista tem um botão e eu gostaria que ao clicar nele, o item fosse deletado. Porém não é o que está acontecendo, a página está executando o método dentro do botão mesmo sem clicar nele, ao apertar F5 ele simplesmente apaga todos os dados do banco.
Método da classe DAO:
public void deletar(int id){
String sql = “delete from colaborador where id=?”;
try{
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setInt(1, id);
stmt.execute();
stmt.close();
}catch(SQLException e){
throw new RuntimeException(e);
}
}
Lista JSTL:
<c:forEach var=“colaborador” items="${daocolaborador.pesquisar()}">
tr>
td style="width: 25%">${colaborador.id}</td
td style="width: 25%">${colaborador.nome}</td
td style="width: 25%">${colaborador.local}</td
td style="width: 25%">
button class="btn btn-warning" style="background-color:orange;color:white" type="submit" onClick="${daocolaborador.deletar(colaborador.id)}">Deletar</button
button class="btn btn-warning" style="background-color:orange;color:white" type="submit" onClick="">Alterar</button
</td
/tr>
</c:forEach>
Alguém sabe me dizer porque dele deletar mesmo sem eu estar clicando no botão? Agradeço desde já.
Bom dia, amigo.
Para melhorar seu código, faça uma validação melhor antes de deletar.
Verifica se existe o id requerido antes para não haver problemas futuros.
Agora vamos para o problema central.
Faça outra função para pegar o submit e retire o onClick do botão.
Para isso insira um name=“del_colaborador” no button.
Agora na função você verifica se foi clicado o botão, caso sim inicia a função de delete.
Separar esse OnClick da função é uma possível solução pois tira de fora do foreach, que ao meu ver pode ser este o problema.
Toda vez que tem um refresh na pagina ele deleta um colaborador ?
Tenta rodar o debug pra ver quando o método é acionado.
1 curtida
Eu entendi o que você quis dizer mas pra ser honesto não sei como fazer. Seria através de um formulário pelo action enviando um request para um Servlet?
Não, quando dá um refresh ele deleta todos de uma vez só.
Declare dentro do try catch assim:
String sql = “delete from colaborador where id="+id+”;
e depois mande imprimir sql.
Assim você consegue ver todas as chamadas que são realizadas.
O problema é que por ter um foreach, o onClick está sendo executado todas as vezes ao que parece, o que acaba deletando todos os dados.
1 curtida
Problema resolvido da seguinte forma:
form action=“ServletSoftware” method=“POST” style=“float: left; margin-right: 1%”>
input type=“hidden” name=“software” value=“remove”>
input type=“hidden” name=“id” value="${software.id}">
button class=“btn btn-danger” style=“color:white” type=“submit”>Deletar
/form>
Obrigado a todos que tentaram ajudar!!