[RESOLVIDO] VRaptor - excluir item de uma tabela

2 respostas
Nicolas_Fernandes

E aí, pessoal, tudo bem? Estou tentando excluir o item de uma tabela. Me ajudem a consertar o que falta para que funcione?

HTML:
<table>
    <thead>
        ...
    </thead>

    <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>
</table>
JS:
<script type="text/javascript">
    $(document).ready(function() {
       $('.deleteItem').click(function(event) {
           event.preventDefault();           
           return confirm('Do you really want to delete this item?');
       });
    });
</script>
Controller:
@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();
    }
Não chama o método delete de modo algum. Alguém sabe o porquê?

2 Respostas

DaniloAndrade

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

Nicolas_Fernandes

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!

Criado 23 de maio de 2013
Ultima resposta 24 de mai. de 2013
Respostas 2
Participantes 2