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

Erro ao remover

Esta acontecendo três erros:

  1. Se eu adiciona alguma empresa e tempo remove-la depois da o erro 500 2.Ao tentar excluir a ultima empresa cai no erro 500 3 no comando "lista.remove(emp)" se coloco sem o "emp" não compila.
public class Banco {

    private static List<Empresa> lista = new ArrayList<Empresa>();
    private static Integer chaveSequencial = 1;

    static {
        Empresa e1 = new Empresa();
        e1.setId(chaveSequencial++);
        e1.setNome("Alura");
        Empresa e2 = new Empresa();
        e2.setId(chaveSequencial++);
        e2.setNome("RST");
        lista.add(e1);
        lista.add(e2);

    }

    public void adiciona(Empresa empresa) {
        empresa.setId(Banco.chaveSequencial++);
        Banco.lista.add(empresa);
    }

    public List<Empresa> getEmpresa() {
        return Banco.lista;
    }

    public void removeEmpresa(Integer id) {

        Iterator<Empresa> it = lista.iterator();

        while (it.hasNext()) {
            Empresa emp = it.next();

            if (emp.getId() == id) {
                lista.remove(emp);
            }
        }
    }
}

public class RemoveEmpresaServlet extends HttpServlet { private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String paramId = request.getParameter("id");
    Integer id = Integer.valueOf(paramId);

    Banco banco = new Banco();
    banco.removeEmpresa(id);
}

}


public class ListaEmpresasServlet extends HttpServlet { private static final long serialVersionUID = 1L;

protected void service(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {

    Banco banco = new Banco();
    List<Empresa> lista = banco.getEmpresa();
    request.setAttribute("empresas", lista);

    RequestDispatcher rd = request.getRequestDispatcher("/listaEmpresas.jsp");

    rd.forward(request, response);

}

}


public class NovaEmpresaServlet extends HttpServlet { private static final long serialVersionUID = 1L;

protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    System.out.println("Cadastrando nova empresa");

    String nomeEmpresa = request.getParameter("nome");
    String paramDataEmpresa = request.getParameter("data");

    Date dataAbertura = null;
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        dataAbertura = sdf.parse(paramDataEmpresa);
    } catch (ParseException e) {
        throw new ServletException(e);
    }

    Empresa empresa = new Empresa();
    empresa.setNome(nomeEmpresa);
    empresa.setDataAbertura(dataAbertura);

    Banco banco = new Banco();
    banco.adiciona(empresa);

    request.setAttribute("empresa", empresa.getNome());
    response.sendRedirect("listaEmpresas");
}

}

`

2 respostas
solução!

Olá Pedro, tudo bem com você?

Então, acredito que todos esses problemas foram causados pela implementação do método, remover, no caso quando estamos utilizando um iterator iremos trabalhar apenas com ele, então aqui:

 if (emp.getId() == id) {
    lista.remove(emp);
}

Quando chegamos nesse ponto o Iterator já está apontando para o elemento que queremos, e no caso o que queremos é remover:

if (emp.getId() == id) {
    it.remove();
}

Quando você executou da primeira vez, meio que o iterator nao estava servindo de nada, pois quando encontrava o elemento você pedia para varrer a lista novamente usando o método da lista

Pode testar?

Abraços e Bons Estudos!

Deu certo, Obrigado!