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

Aula 4 - Método DELETE

Olá,

Conforme orientado, eu alterei a anotação do meu método de remoção de produto para o @DELETE.

Porém vendo em alguns sites, o html não trabalho com PUT nem o DELETE, e em minha JSP, configurei um link na página de listagem para remoção de produto. Que ao executada efetua um GET, causando erro 405.

Existe alguma forma em executar operações de Delete ou Put via html, abaixo segue o código do meu método dentro do controller, e da minha pagina:

Método:

    @Delete
    public void remover(Produto produto){
        em.getTransaction().begin();
        ProdutoDao dao = new ProdutoDao(em);
        dao.remove(produto);
        em.getTransaction().commit();
    }

View:

<td><a href="<c:url value='/produto/remover?produto.id=${produto.id}'/>">Remover</a></td>

OBS: Já tentei alterar de link, para utilizar um form com o campo de input do type "hidden", porém ao submeter o formulário, recebi o mesmo 405, pois o que de fato foi executado foi o método POST.

4 respostas

Boa noite! Também percebi isto agora...

Acabei alterando a anotação do meu método e não testando anteriormente...

No aguardo da solução.

Abraços

solução!

Oi Victor e Feippe, tudo bem?

É uma limitação dos navegadores mesmo. Só conseguimos fazer requisições do tipo GET e POST através do navegador.

Uma solução é fazer o que o Victor tentou, utilizando um form, mas passando um parâmetro a mais na requisição para indicar ao VRaptor o método http que queremos de fato executar.

<td>
    <form action="<c:url  value='/produto/remover'/>" method="post">
        <input type="hidden" name="_method" value="DELETE">
        <input type="hidden" name="produto.id" value="${produto.id}">
        <input type="submit" value="Excluir">
    </form>
</td>

Aqui também tem algumas informações sobre: http://www.vraptor.org/pt/docs/controllers-rest/

Faz sentido? Abraços!

Legal Lucas. Eu havia pensado em fazer uma requisição AJAX com method delete.

Obrigado pelo feedback.

Abraços

Poxa Lucas Felix, funcionou, eu havia pensado na mesma solução, mas estava recebendo 404, pois havia esqueci de voltar algumas modificações que eu havia feito no controller.

Obrigado pelo feedback :)