Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Enviar valor linha de um Table para um Servlet

Pessoal, boa noite

O código abaixo exibe formulário listando os clientes cadastrados na base. A ultima coluna na Table é um botão para Excluir o cliente da linha.

Duvida:

1) Como consigo recuperar o ID (coluna 1) da linha que o usuário cliclou no botão Excluir e enviar para o Servlet, assim, na classe Java, consigo recuperar o ID usando req.getParameter("id"), onde req = HttpServletRequest

Código:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<body>

    <h2>Resultado da busca:</h2>
    <br>
    <br>

    <form action="executar" method="POST">
    <input type="hidden" name="tarefa" value="ExcluiCliente">
        <table>
            <tr>
                <td>Id</td>
                <td>Nome</td>
                <td>Documento</td>
                <td>Tipo</td>
                <td>Excluir</td>
            </tr>
            <c:forEach var="c" items="${clientes}">
                <tr>
                    <td><c:out value="${c.id}" /></td>
                    <td><c:out value="${c.nome}" /></td>
                    <td><c:out value="${c.documento}" /></td>
                    <td><c:out value="${c.tipoCliente}" /></td>    
                    <td><input type="submit" value="Excluir"></td>
                </tr>
            </c:forEach>
        </table>
    </form>

    <br><br>
    <c:url value="/index.jsp" var="urlIndex"/>
    <a href="${urlIndex}">Voltar a pagina principal</a>

</body>
</html>
3 respostas

Oi Bruno,

Você precisa levar do JSP mais um parâmetro, que será o ID do cliente.

Como você está utilizando um tabela, precisa ter um formulário para cada registro, para que o parametro seja diferente em cada registro.

Seria algo assim:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<body>
<h2>Resultado da busca:</h2>
<br>
<br>
<table>
    <tr>
        <td>Id</td>
        <td>Nome</td>
        <td>Documento</td>
        <td>Tipo</td>
        <td>Excluir</td>
    </tr>
    <c:forEach var="c" items="${clientes}">
        <form action="executar" method="POST">
            <input type="hidden" name="tarefa" value="ExcluiCliente">
            <input type="hidden" name="id" value="${c.id}">
            <tr>
                <td><c:out value="${c.id}" /></td>
                <td><c:out value="${c.nome}" /></td>
                <td><c:out value="${c.documento}" /></td>
                <td><c:out value="${c.tipoCliente}" /></td>    
                <td><input type="submit" value="Excluir"></td>
            </tr>
        </form>
    </c:forEach>
</table>
 <br><br>
    <c:url value="/index.jsp" var="urlIndex"/>
    <a href="${urlIndex}">Voltar a pagina principal</a>

</body>
</html>

Legal, funcionou.

Uma duvida, caso eu queira acrescentar uma nova coluna semelhante a Excluir onde o usuário tem a opção de Alterar o registro.

Como está o código, a requisição vai para uma Servlet "executar", onde o parâmetro tarefa é ExcluiCliente. Com isso, a servlet executa o comando de exclusão do registro e retoma para a pagina de sucesso.

Incluindo a coluna "Alterar registro", do jeito que o código está, é possível deixar o parâmetro tarefa dinâmico para ser "ExcluiCliente" ou "AlteraCliente" dependendo da ação do usuário?

solução!

Consegui, inclui o atributo tarefa em cada linha das colunas Excluir e Alterar.