E aí, pessoal, tudo bem? Estou tentando excluir o item de uma tabela. Me ajudem a consertar o que falta para que funcione?
HTML:[code]
...
<tbody>
<c:forEach items="${list}" var="item">
<tr>
<td>${item.name}</td>
<td>
<a class="deleteItem"
href="<c:url value="/item/delete/${item.ID}" />"
title="Edit '${item.name}'."><i class="icon-trash"></i></a>
</td>
</c:forEach>
</tbody>
[/code]JS:[code][/code]Controller:[code]@Resource
public class ItemController {
//...
public ItemController (Result result, Validator validator,
ItemRepository itemRepository) {
this.result = result;
this.validator = validator;
this.itemRepository= itemRepository;
}
@Post
@Path("/item/delete/{itemID}")
public void delete(long itemID) {
itemRepository.deleteItem(itemID);
result.include("list", itemRepository.retrieveItems())
.redirectTo(ItemController.class).list();
}[/code]
Não chama o método delete de modo algum. Alguém sabe o porquê?
com isso aqui não vai funcionar
<a href="<c:url value="/item/delete/${item.ID}" />"
quando vc usa links as requisições são feitas usando o Metodo “GET” e seu metodo do controller esta esperando um POST
@Post // nunca vai cair nesse metodo pois a requisição esta sendo feita usando Get
@Path("/item/delete/{itemID}")
public void delete(long itemID) {
itemRepository.deleteItem(itemID);
result.include("list", itemRepository.retrieveItems())
.redirectTo(ItemController.class).list();
}
uma alternativa alterar sua tela pra fazer a requisição usando um form usando post ou alterar o anotação do controller para @Get
Sim, eu tive que fazer duas modificações.
Uma foi essa: transformar o método com a annotation @Get.
A segunda foi colocar a chamada do método preventDefault() dentro de uma condicional. Se não, nunca vai executar o método.
Obrigado!