Jump to content

Problemas para construir um BOTÃO EXCLUIR com ALERT de escolha dentro de uma tabela dinâmica


Go to solution Solved by Wenderson Lisboa,

Recommended Posts

Posted

Bom dia, estou estudando Java Web e me deparei com um problema, fiz o CRUD e consegui completar os três métodos menos o de EXCLUIR. Vou tentar repassar meu problema da melhor maneira possível, construí um pequeno projeto de cadastro de agenda pessoal para praticar a linguagem JAVA, nele fiz uma tabela dinâmica que se atualiza mediante os métodos do CRUD, pois bem, não consegui fazer funcionar o botão EXCLUIR, quero que esse botão chame uma função JAVASCRIPT que pergunte se quero realmente excluir aquele contato e se decidir excluir que ele envie o ID daquele contato para o SERVLET CONTROLLER para que possa ser direcionado ao arquivo DAO e assim se conclua a EXCLUSÃO no BANCO DE DADOS. Ao meu ver o problema começa tabela que não consegue inicializar o ArrayList e assim o FOR não consegue usar o método SIZE() para saber o ID correto para encaminha-lo. Como posso reverter essa situação?

 

Abaixo a imagem de uma tabela com ArrayList

Captura-de-tela-2025-02-09-094249.png

Aqui um ALERT em javascript para decidirmos se vamos ou não excluir o cadastro

Captura-de-tela-2025-02-09-094318.png

Abaixo o erro 

Captura-de-tela-2025-02-09-094330.png

O código em JAVASCRIPT que abre o ALERT

function confirmar(idcon){
    let resposta = confirm("Confirma a exclusão desse contato?");
    if(resposta === true){
        //O parâmetro location transfere o usuário para outro documento no caso, o parâmetro "delete?idcon="+idcon encaminhará o ID do contato para o servilet CONTROLLER.
        window.location.href="delete?idcon=" + idcon;
    }
}

O código do documento que exibe a tabela com os contatos

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="model.JavaBeens"%>
<%@page import="java.util.ArrayList"%>
<%
    ArrayList<JavaBeens> lista = (ArrayList<JavaBeens>)
    request.getAttribute("contatos");
%>
<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" href="CSS/estilo.css"/>
        <link rel="icon" href="imagens/phone_icon.png"/>
        <title>Agenda de Contatos</title>
    </head>
    <body>
        <div class="painel">
            <div class="painel">
                <h1>Agenda de Contatos</h1>
            <a href="novo.html" class="b1">Novo Contato</a>
            </div>
            <div class="painel">
                <table id="tabela">
                    <tr>
                        <th>ID</th>
                        <th>Nome</th>
                        <th>Telefone</th>
                        <th>E-mail</th>
                        <th>Opções</th>
                    </tr>
                    <tbody>
                        <%for(int i = 0; i< lista.size(); i++){%>
                            <tr>
                                <td><%=lista.get(i).getIdcon()%></td>
                                <td><%=lista.get(i).getNome()%></td>
                                <td><%=lista.get(i).getFone()%></td>
                                <td><%=lista.get(i).getEmail()%></td>
                                <td><a href="select?idcon=<%=lista.get(i).getIdcon()%>" class="b2">Editar</a><a href="javascript: confirmar(<%=lista.get(i).getIdcon()%>)" class="b3">Excluir</a></td>
                            </tr>
                        <%}%>
                    </tbody>
                </table>
                <script src="JS/confirmador.js"></script>
            </div>
        </div>
    </body>
</html>

O código do SERVLET CONTROLLER com a função EXCLUIR

/**
 * Remove o contato com base no parâmetro "idcon" enviado na requisição.
 *
 * @param request objeto HttpServletRequest que contém o parâmetro "idcon"
 * @param response objeto HttpServletResponse para redirecionamento
 * @throws ServletException se ocorrer algum erro na servlet
 * @throws IOException se ocorrer algum erro de I/O
 */
    protected void removerContato(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
       //Recebimento do ID do contato a ser excluido
        String idcon = request.getParameter("idcon");
        //Setar a variável idcon JavaBeens
        contato.setIdcon(idcon);
        //executar o método deletarContato (DAO)passando o objeto contato
        dao.deletarContato(contato);
        //Redirecionar para o documento agenda.jsp para fazer as alterações
        response.sendRedirect("main");
    }

O código no arquivo DAO do método EXCLUIR

//Deletar o contato
    public void deletarContato(JavaBeens contato){
        String delete = "DELETE FROM CONTATOS WHERE IDCON = ?";
        try{
            Connection con = conectar();
            PreparedStatement pst = con.prepareStatement(delete);
            pst.setString(1, contato.getIdcon());
            pst.executeUpdate();
            con.close();
        }catch(Exception e){
            System.out.println(e);
        }
    }
  • Solution
Posted

Boa tarde amigos, depois de esmiuçar o código inteiro, encontrei finalmente o erro. Ele estava na parte da rota, o nome "/delete" estava digitado de forma errada e assim o ao enviar os dados para SERVLET não se encontrava a rota "/delete" .

//Rotas para API
        
        String action = request.getServletPath();
        System.out.println(action);
        
        if(action.equals("/main")){
            Contatos(request,response);
        }else if(action.equals("/insert")){
            novoContato(request,response);
        }else if(action.equals("/select")){
            listarContato(request,response);
        }else if(action.equals("/update")){
            editarContato(request,response);
        }else if(action.equals("/dlete")){    <<<<------------
            removerContato(request,response);
        }else{
            response.sendRedirect("agenda.jsp");
        }
        processRequest(request, response);
    }
Posted

Alguma razão em especial para usares JSP?  É uma tecnologia que me parece estar praticamente morta, e a única razão que vejo para a aprender é ter que manter projectos antigos feitos em JSP.

Aprender Spring + Thymeleaf provavelmente valia mais a pena.  E mesmo esta combinação é para o caso de queres fazer páginas web em Java.  Pessoalmente prefiro usar Java apenas para backend, e aí tens frameworks mais simples que o Spring (e.g. Dropwizard), embora o Spring seja a solução mais popular e com mais mercado.

Posted
Em 10/02/2025 às 18:16, Rui Carlos disse:

Alguma razão em especial para usares JSP?  É uma tecnologia que me parece estar praticamente morta, e a única razão que vejo para a aprender é ter que manter projectos antigos feitos em JSP.

Aprender Spring + Thymeleaf provavelmente valia mais a pena.  E mesmo esta combinação é para o caso de queres fazer páginas web em Java.  Pessoalmente prefiro usar Java apenas para backend, e aí tens frameworks mais simples que o Spring (e.g. Dropwizard), embora o Spring seja a solução mais popular e com mais mercado.

Estou terminando a faculdade amigo, faz parte da matéria. Realmente tenho ouvido falar muito sobre springboot, mas estou muito satisfeito em aprender como se faz as coisas manualmente, no futuro próximo quero trabalhar com fremworks, mas por enquanto é isso.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.