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

Erro ao remover produto - VRaptor 3

Galera estou com problemas ao remover o produto, nada acontece! Parece que o metodo remove não está sendo chamado!

lsita.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="<c:url value="/js/jquery-1.6.1.min.js" />"></script>
<script type="text/javascript">
    function remove(id) {
        $.get('remove?produto.id=' + id, function() {
            $('#produto-' + id).remove();
            alert('Produto removido com sucesso');
        });
    }
</script>
<title>Lista de produtos</title>
</head>
<body>
    <h1>Seja bem-vindo a lista de produtos</h1>
    ${mensagem}
    <table>
        <c:forEach var="produto" items="${produtoList}">
            <tr id="produto-${produto.id}">
                <td>${produto.nome}</td>
                <td>${produto.descricao}</td>
                <td>${produto.preco}</td>
                <td><a href="javascript:void(0);"
                    onclick="remove(${produto.id})">Remover</a></td>
            </tr>
        </c:forEach>
    </table>
</body>

</html>

ProdutoController

package br.com.caelum.online.loja.controlador;

import java.util.List;

import br.com.caelum.online.loja.dao.ProdutoDao;
import br.com.caelum.online.loja.dominio.Produto;
import br.com.caelum.online.loja.repositorio.RepositorioDeProdutos;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
import br.com.caelum.vraptor.validator.Validations;
import br.com.caelum.vraptor.view.Results;

@Resource
public class ProdutoController {

    private final RepositorioDeProdutos produtos;
    private final Result result;
    private Validator validator;

    public ProdutoController(Result result, RepositorioDeProdutos produtos, Validator validator) {
        this.produtos = produtos;
        this.result = result;
        this.validator = validator;
    }

    @Path("/lista")
    public List<Produto> lista() {
        return produtos.pegaTodos();
    }

    @Path("/produto/{id}")
    public Produto exibe(long id) {
        return produtos.pegaPorId(id);
    }

    @Path("/formulario")
    public void formulario() {
    }

    @Post
    public void adiciona(final Produto produto) {
        // if(produto.getPreco() < 0) {
        // validator.add(new ValidationMessage("o preço deve ser maior que R$0.1",
        // "preco"));
        // validator.onErrorUsePageOf(ProdutoController.class).formulario();
        // }

        validator.checking(new Validations(){{
            that(produto.getPreco() > 0.1,"erro", "produto.preco.invalido");
        }});

        validator.onErrorUsePageOf(ProdutoController.class).formulario();

        produtos.salva(produto);
        result.include("mensagem", "Novo produto adicionado com sucesso!");
        // result.forwardTo(ProdutoController.class).lista(); // não usar fowardTo
        // PERIGO submeter novamente o form
        result.redirectTo(ProdutoController.class).lista();
    }

    @Path("/produto/{id}/xml")
    public void exibeComoXML(long id) {
        Produto produto = produtos.pegaPorId(id);
        result.use(Results.xml()).from(produto).serialize();
    }

    @Path("/produto/{id}/json")
    public void exibeComoJSON(long id) {
        Produto produto = produtos.pegaPorId(id);
        result.use(Results.json()).from(produto).serialize();
    }

    public void remove(Produto produto) {
        produtos.remove(produto);
        result.nothing();
    }
}
2 respostas
solução!

Oi, tudo bem ?

Acho que você precisa chamar o método hide :



function remover(id) {
    $.get('remove?produto.id=' + id, function() {
        $('#produto-' + id).hide();
        alert('Produto removido com sucesso');
    });
}

Olá Matheus, alé de trocar o metodo remove pelo hide do Jquery, eu coloquei a anotação @Path("/remove") no método remove e funcionou, obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software