fiz o seguinte para adicionar um objeto na list
Produto lista = pro.Consultar(Integer.parseInt(sports[i]));
carrinho.add( lista);
ai adiciono perfeito na lista, e adiciono na sessao essa lista
session.setAttribute(“Carrinho_Compra”, Temp_carrinho);
e quero remover dessa lista o objeto que me retornou da pesquiza
List carrinho_atual = (List) session.getAttribute(“Carrinho_Compra”);
ai recebo a lista da sessao
faco a pesquisa para ver qual objeto quero remover
carrinho_atual.remove(pro.Consultar(id_produto));
mas nao da certo nao da erro nenhum porem nao remove
vc implementou o método equals pra classe produto?
Sugiro a voce implementar o equals(Object o) utilizando o ID de cada produto, bem como o hashCode().
Ate mais
se não souber implementar o método equals() e hashCode() uma solução temporária é varrer a lista e verificar se o objeto passado por parametro é igual ao objeto na posição n da lista usando o método equals mesmo, ai ele vai achar o correto blz
Posta o código ai cara, fica mais fácil
Esse cara tá de sacanagem. 215 mensagens no GUJ, e já deve ser pelo menos a terceira vez que falo para ele usar a tag code. Vai aqui o link novamente:
http://www.guj.com.br/posts/list/50115.java
Para o método remove funcionar:
- A classe produto deve implementar corretamente o método equals;
- A classe produto deve implementar corretamente o método hashCode;
meu codigo pego os valores do checkbox selecionados e o ID do produto vem no value do checkbox
cria esse checkbox dentro do for da consulta do produto
<INPUT TYPE=CHECKBOX NAME="check" ID="check" VALUE="<%=pro.getid_produto()%>"
String[] sports = request.getParameterValues("check");
ProdutoDao pro = new ProdutoDao();
List<Produto> carrinho = (List<Produto>) session.getAttribute("Carrinho_Compra");
if(carrinho!=null){
if (sports != null){
for (int i = 0; i < sports.length; i++){
out.println ("<b>"+sports[i]+"<b>");
Produto lista = pro.Consultar(Integer.parseInt(sports[i]));
carrinho.add( lista);
}
}
session.setAttribute("Carrinho_Compra", carrinho);
}else{
List<Produto> Temp_carrinho = new ArrayList<Produto>();
if (sports != null){
for (int i = 0; i < sports.length; i++){
out.println ("<b>"+sports[i]+"<b>");
Produto lista = pro.Consultar(Integer.parseInt(sports[i]));
Temp_carrinho.add( lista);
}
}
session.setAttribute("Carrinho_Compra", Temp_carrinho);
}
request.getRequestDispatcher("Produto_Consultar_CARRINHO.jsp").forward(request,response);
e para remover fiz assim
ProdutoDao pro = new ProdutoDao();
List<Produto> carrinho_atual = (List<Produto>) session.getAttribute("Carrinho_Compra");
Produto T_lista = pro.Consultar(id_produto);
carrinho_atual.remove(pro.Consultar(id_produto));
//ou assim tambem nao funciona
carrinho_atual.remove(T_lista);
session.setAttribute("Carrinho_Compra", carrinho_atual);
mas nao funciona nao para remover nao remove
Você tem certeza que o método pro.Consultar(idProduto) está retornando o produto certo?
aqui o metodo quando eu pesquizo pelo nome do produto ele aparece certo na lista
public Produto Consultar(Integer id_produto) {
String sql = "SELECT * FROM produto WHERE id_produto = ?";
try {
PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setInt(1, id_produto);
ResultSet rs = stmt.executeQuery();
List<Produto> lista = getProduto(rs);
if(lista.size() > 0)
return lista.get(0);
} catch (SQLException sQLException) {
System.out.println("Erro ao consultar Produto");
}
return null;
}
public List<Produto> listar (Integer id_produto) {
String sql = "SELECT * FROM produto WHERE id_produto = ?";
try {
PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setInt(1, id_produto);
ResultSet rs = stmt.executeQuery();
return getProduto(rs);
} catch (SQLException sQLException) {
System.out.println("Erro ao listar Produto");
}
return null;
}
no servelt
String nome_produto = request.getParameter("nome_produto");
ProdutoDao pro = new ProdutoDao();
List<Produto> lista = pro.listar(nome_produto);
request.setAttribute("lista",lista);
request.getRequestDispatcher("Produto_Consultar.jsp").forward(request,response);
ai aparece bem certinho porem quando uso o listar
quando uso o consultar nao da erro mas com o listar incompativel tipos e com consultar da certo
List lista = pro.listar(nome_produto);
Seu código tem uma série de problemas:
- Porque os parâmetros são do tipo Integer e não do tipo primitivo int?
- Onde você está fechando os Statements? É necessário e imprescindível dar close() em todos os statements abertos;
- Volto a pergunta. Tem certeza que aquela linha está retornando o produto corretamente? Pode ser que o id inválido esteja gravado na sessão, por exemplo. Ou que você esteja usando a constante errada. Não tem como vc fazer depuração?
Cara, segue um exemlo que funciona:
import java.util.ArrayList;
import java.util.List;
public class RemocaoDeProduto {
public static void main(String [] asdf){
List<Produto> lista = new ArrayList<Produto>();
Produto p1 = new Produto();
p1.setId(1);
Produto p2 = new Produto();
p2.setId(2);
Produto p3 = new Produto();
p3.setId(3);
lista.add(p1);
lista.add(p2);
lista.add(p3);
lista.remove(p2);
for (Produto produto : lista) {
System.out.println(produto.getId());
}
}
}
class Produto{
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public boolean equals(Object o){
boolean ok = false;
if(o != null && o instanceof Produto && this.getId() == ((Produto)o).getId()){
ok = true;
}
return ok;
}
public int hashCode(){
return this.getId();
}
}
Espero ter ajudado!
assim verifiquei aqui e esta pegando certinho certinho o produto
Produto p3 = pro.Consultar(id_produto);
out.println (""+ p3.getid_produto()+"");
carrinho_atual.remove(p3);
tinha 2 produto adicionado na lista de codigo IDproduto 3 IDproduto 4
ai coloquei para excluir o produto 4 e o out.println (""+ p3.getid_produto()+""); saiu o numero 4 certinho esta pegando certo
porem nao apaga de maneira nenhuma