In my Vraptor project I'm trying to delete a record from a list without the page being reloaded. From the book I'm following, AJAX is used so that the removed record "adds" without the whole page being loaded. The error below occurs when I try to use the @Delete annotation of vraptor.
HTTP Status 405 -
type: Status report
description: The specified HTTP method is not allowed for the requested resource.
My controller:
@Controller
@Path("/pessoa")
public class PessoaController {
[...]
@Delete("/remove/{codPessoa}")
public void remove(Long codPessoa) {
Pessoa pessoaEncontrada = repository.findById(codPessoa, 1);
if (pessoaEncontrada != null) {
repository.delete(pessoaEncontrada);
result.nothing();
} else
result.notFound();
}}
On the JSP page:
<script src="${pageContext.request.contextPath}/js/jquery-2.1.4.min.js"></script>
<script>
$("#pessoas.remove").on("click", function(event) {
event.preventDefault();
var pessoa = $(this).closest(".pessoa");
});
$.ajax({
url : $(this).attr("href"),
type : "POST",
data : {_method : "DELETE"}
}).done(function(data, textStatus, jqXHR) {
pessoa.fadeOut();
}).fail(function(jqXHR, textStatus, errorThrown) {
alert("Cliente não foi alterado! " + errorThrown);
});
[...]
<ul id=pessoas>
<c:forEach items="${pessoaList}" var="pessoa">
<li class="pessoa">${pessoa.codPessoa}-${pessoa.nomeFantasia}
<a href="${linkTo[PessoaController].edita(pessoa.codPessoa, pessoa.codEmpresa)}"> -Editar</a>
<a class="remove" href="${linkTo[PessoaController].remove(pessoa.codPessoa)}"> -Remover</a>
</li>
</c:forEach>
</ul>