2
respostas

Erro ao criar metodo DELETE para um item da tabela

Não consigo fazer metodo para remover item da tabela. Aparece erro 405.

ProdutoController.java

    @Delete
    public void remove(Produto produto){
        dao.remove(produto);
    }

Lista.jsp

<form action="<c:url value='/produto/remove'/>" method="DELETE">
            <div class="col s4">
                REMOVER PELO ID:<input type="text" />
            </div>
            <div class="col s4 right">
                <input type="submit" class="btn waves-effect waves-light btn-large right" value="REMOVER"></input>
            </div>
        </form>

ProdutoDao.java

public void remove(Produto produto) {
        em.getTransaction().begin();
        em.remove(busca(produto));
        em.getTransaction().commit();
    }

    public Produto busca(Produto produto) {
        return em.find(Produto.class, produto.getId());
    }
2 respostas

Olá Leonardo,

faltou o name no input text para dizer que é o id do produto.

os browsers não suportam o método DELETE, vc deve submeter um POST e junto com o post, vc deve enviar tambem o id do objeto que quer remover e um parametro adicional, que no caso do vraptor é o _method

<form action="<c:url value='/produto/remove'/>" method="POST">
      <input type="hidden" name="produto.id" value="${produto.produtoId}"/>
    <input type="hidden" name="_method" value="delete"/>
                <input type="submit" class="btn waves-effect waves-light btn-large right" value="REMOVER"></input>

        </form>

e na sua action, usar a anotação @Delete

@Delete("/produto/remove")
public void remove(Produto produto) {
        em.getTransaction().begin();
        em.remove(busca(produto));
        em.getTransaction().commit();
    }