[Resolvido]ArrayList lista o mesmo valor varias vezes!

Pessoal, fiz um carrinho de compras… So estou com um problema: Eu add 3 elementos no array, mas ele so aparece o ulltimo elemento q eu add (3x) pq eu adicionei 3 elementos.

EX:

Caneta 5
Mouse 2
copo 12

Ele mostra assim na pagina jsf:

copo 12
copo 12
copo 12

Outra coisa: Eu fiz um System.out.println(lista);
Essa lista mostra o mesmo objeto sempre… Tipo, add 4 elementos PARECE q repete esse elemeento 4x…

[requisicao.web.CarrinhoBean@4bb1c978, requisicao.web.CarrinhoBean@4bb1c978, requisicao.web.CarrinhoBean@4bb1c978] requisicao.web.CarrinhoBean@4bb1c978]

Vou colocar o MB e a pagina jsf…

@ManagedBean(name="carrinhoBean")    
@SessionScoped    
    
public class CarrinhoBean implements Serializable{    
        
    private static final long serialVersionUID = 7810729837634865242L;    
        
    private String nomeItem;    
    private int quantidadeItem;    
    public String car;    
        
    // getts e setters    
    
    private List<CarrinhoBean> lista = new ArrayList<CarrinhoBean>();      
        
    public List<CarrinhoBean> listar() {      
        return this.lista;      
    }      
          
    public String insere() {      
        lista.add(this);      
          
           
        System.out.println(lista.toString());    
        return null;      
    }      
        
    public String remove() {      
        lista.remove(this);      
        return null;      
    }    
    
    public List<CarrinhoBean> getLista() {    
            
         
         if (this.lista == null || this.lista.isEmpty()) {      
                CarrinhoBean carrinhoBean = new CarrinhoBean();      
                this.lista = carrinhoBean.listar();      
                
        }    
            return this.lista;      
        
    }    
    
    public void setLista(List<CarrinhoBean> lista) {    
        this.lista = lista;    
    }      
    
}    
Nova Requisição    
</ui:define>    
    <ui:define name="corpo">    
        <h:form id="cadastro">    
            <h:messages />    
            <br/>    
                <fieldset><legend>Requisição</legend>    
                <h:panelGrid columns="3">    
                <h:outputText value="Item:"/>      
                <h:selectOneMenu id="selecioneitem" value ="#{carrinhoBean.nomeItem}">    
                <f:selectItem itemLabel="Selecione" itemValue=""/>      
                <f:selectItems     
                    value="#{itemBean.itens}"    
                    var ="itens"    
                    itemValue="#{itens}"    
                    itemLabel="#{itens}"/>    
                </h:selectOneMenu>        
                <br/>    
                <h:outputLabel value="Quantidade:" for="quantidadeItem" />    
                <h:inputText id="quantidadeItem" label="Quantidade"    
                    value="#{carrinhoBean.quantidadeItem}" required="true" size="4"/>    
                <br/>     
                <h:commandButton action="#{carrinhoBean.insere}"  value="Adicionar" />    
                </h:panelGrid>    
                </fieldset>       
                <br/>    
                <br/>    
                <fieldset><legend>Meus Itens</legend>    
                <h:panelGrid columns="3">    
                <h:dataTable value="#{carrinhoBean.lista}" var="car" rules="rows"     
                cellpadding="5">      
                <f:facet name="caption">      
                    <br />      
                </f:facet>      
                <f:facet name="header">Início da listagem</f:facet>      
                <f:facet name="footer">Final da listagem</f:facet>     
               <h:column>    
                    <f:facet name="header">Nome do Item</f:facet>      
                  <h:outputText value="#{car.nomeItem}" />     
                </h:column>      
                <h:column>      
                    <f:facet name="header">Qntd. Solicitada</f:facet>      
                   <h:outputText value="#{car.quantidadeItem}" />     
                </h:column>      
                <h:column>    
               <h:commandLink action= "#{carrinhoBean.remove}"    
                 onclick="if (!confirm('Confirma a exclusão  ?')) return false;">    
                    <h:graphicImage library="imagens" name="apagar.png" style="border:0" />    
                </h:commandLink>    
                </h:column>    
            </h:dataTable>     
            </h:panelGrid>    
            </fieldset>    
             <br/>    
             <br/>    
             <h:commandButton  value="Finalizar" />     
             <br/>    
             <br/>    
        </h:form>      
    </ui:define>      
</ui:composition>      
</html>      

vc tem um carrinho com uma lista de carrinhos? tá certo isso?

outra coisa

tah vendo q o seu método insere está inserido o carrinho dentro dele msm??

obs: ao invés de vc retornar null, deixa seu método sem retorno.

[quote=kadu.m.lino]vc tem um carrinho com uma lista de carrinhos? tá certo isso?

outra coisa

tah vendo q o seu método insere está inserido o carrinho dentro dele msm??

obs: ao invés de vc retornar null, deixa seu método sem retorno.[/quote]

Entao eu teria q criar uma classe Carrinho com os atributos, e qnd fosse inserir, eu teria q inserir no carrinho.

Nao eh isso ?

public String insere() {
lista.add(carrinho);
}

Olha como ficou a modelagem de um carrinho de compra nesse curso

http://www.caelum.com.br/apostila-vraptor-hibernate/criando-o-carrinho-de-compras/#13-1-o-modelo-do-carrinho

[quote=kadu.m.lino]Olha como ficou a modelagem de um carrinho de compra nesse curso

http://www.caelum.com.br/apostila-vraptor-hibernate/criando-o-carrinho-de-compras/#13-1-o-modelo-do-carrinho[/quote]

Entao cara

Do jeito q eu fiz parece estar certo. Peguei aquele exemplo aqui no forum mesmo…
Eu to add e to removendo. O problema parece estar na listagem… Vou colocar aqui
o topico q eu peguei o exemplo.

O cara do topico flw q so faltava fazer um loop p listar… Acho q estar correto.

No meu caso, eu so to listando o ultimo elemento q add(varias vezes)… Tipo, eu add 4 elementos, ele lista o ultimo 4x!

Vamos lah…

essa parte:

if (this.lista == null || this.lista.isEmpty()) {        
  CarrinhoBean carrinhoBean = new CarrinhoBean();        
  this.lista = carrinhoBean.listar();        
                  
 }      
return this.lista;  

vc estah vendo q ele soh vai criar uma nova instância se ele for igual a null ou vazio? e dpois q ele tiver algum registro? não cria a instância? pense nisso…

Mas o dele faz um certo sentido…
pq o comentário pode ter outros comentários! no seu caso não faz sentido um carrinho ter outros carrinhos!

e de qualquer forma, isso tá errado ele está add o comentário nele msm:

public String insereComentario() { lista.add(this); return "sucesso"; }

Toda vez q for inserir um novo elemento num array vc deve criar uma nova instância deste objeto, senão vai acontecer dele sobreescrever este mesmo array.

2 curtidas

o que vc quis dizer alexandre? perdão… mas não entendi

Pelo q ele tah falando ali, o último registro está se repetindo…

isso daih tah acontecendo pq ele na hora de inserir os elementos no array, ele não tah dando um new nesse objeto (array)…por isso, ele sempre vai mostrar o último registro.

1 curtida

E claaaro…a lista de carrinho dentro de um carrinho não faz sentido algum…

1 curtida

Entendi galera… To em casa agora, amanha qnd eu chegar no trabalho eu vou fazer algumas modificacoes :slight_smile:

[quote=AlexandreTLazaro]Pelo q ele tah falando ali, o último registro está se repetindo…

isso daih tah acontecendo pq ele na hora de inserir os elementos no array, ele não tah dando um new nesse objeto (array)…por isso, ele sempre vai mostrar o último registro.[/quote]

Alaxandre, fiz algumas modificacoes mas nada deu certo… Dei um new antes de inserir e tal, mas o valor q mostra na lista eh sempre 0 !
Como vc faria esse tal carrinho ? To tendo dificuldades…

http://www.caelum.com.br/apostila-vraptor-hibernat...ras/#13-1-o-modelo-do-carrinho

esse exemplo não serve pra vc???

[quote=kadu.m.lino]http://www.caelum.com.br/apostila-vraptor-hibernat...ras/#13-1-o-modelo-do-carrinho

esse exemplo não serve pra vc???[/quote]

O problema eh q nao eh em jsf… Mas vou tentar aqui. Vc tem outro exemplo ?

Cara, o domínio pouco importa em relaçãpo ao framework usado!

vc precisa só abstrair o conceito que eles impõe de carrinho lá!

e parece que serve para o seu domínio…

[quote=kadu.m.lino]Cara, o domínio pouco importa em relaçãpo ao framework usado!

vc precisa só abstrair o conceito que eles impõe de carrinho lá!

e parece que serve para o seu domínio…[/quote]

Eh cara, mas aquele ta meio confuso p mim…

To me acabando de procurar um exemplo legal e nada… Ta complicaod : /

tenta explicar o seu domínio… o pessoal aqui pode te ajudar

Resolvi, meu velho! Ficou assim:



@ManagedBean(name="carrinhoBean")
@SessionScoped

public class CarrinhoBean implements Serializable{
	
	private static final long serialVersionUID = 7810729837634865242L;
	
	 
	
	private String nomeItem;
	private int quantidadeItem;
	
	public String car;
	
	public String getNomeItem() {
		return nomeItem;
	}

	public void setNomeItem(String nomeItem) {
		this.nomeItem = nomeItem;
	}

	public int getQuantidadeItem() {
		return quantidadeItem;
	}

	public void setQuantidadeItem(int quantidadeItem) {
		this.quantidadeItem = quantidadeItem;
	}
	
	public String getCar() {
		return car;
	}

	public void setCar(String car) {
		this.car = car;
	}


	private List<CarrinhoBean> lista = new ArrayList<CarrinhoBean>();  
    
    public List<CarrinhoBean> listar() {  
        return this.lista;  
    }  
      
    public String insere() {  
    	CarrinhoBean carrinhoBean = new CarrinhoBean();
    	carrinhoBean.setNomeItem(nomeItem);
    	carrinhoBean.setQuantidadeItem(quantidadeItem);
    	lista.add(carrinhoBean);
      
       
        System.out.println(lista.toString());
        return null;  
    }  
    
    public String remove(CarrinhoBean carrinhoBean) {  
    	
    	
    	lista.remove(carrinhoBean);
    	
        return null;  
    }

	public List<CarrinhoBean> getLista() {
		
			
		 if (this.lista == null || this.lista.isEmpty()) {  
	            CarrinhoBean carrinhoBean = new CarrinhoBean();  
	            this.lista = carrinhoBean.listar();  
	        }  
	        return this.lista;  
	
	}

	public void setLista(List<CarrinhoBean> lista) {
		this.lista = lista;
	}
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="/templates/interna.xhtml">
	<ui:define name="titulo">
Nova Requisição
</ui:define>
	<ui:define name="corpo">
		<h:form id="cadastro">
			<h:messages />
			<br/>
				<fieldset><legend>Requisição</legend>
				<h:panelGrid columns="3">
				<h:outputText value="Item:"/>  
        		<h:selectOneMenu id="selecioneitem" value="#{carrinhoBean.nomeItem}">
 				<f:selectItem itemLabel="Selecione" itemValue=""/>  
 				<f:selectItems 
 					value="#{itemBean.itens}"
 					var ="itens"
					itemValue="#{itens}"
					itemLabel="#{itens}"/>
				</h:selectOneMenu>	
				<br/>
				<h:outputLabel value="Quantidade:" for="quantidadeItem" />
				<h:inputText id="quantidadeItem" label="Quantidade"
					value="#{carrinhoBean.quantidadeItem}" required="true" size="4"/>
				<br/>	
				<h:commandButton action="#{carrinhoBean.insere}"  value="Adicionar" />
				</h:panelGrid>
				</fieldset>	
				<br/>
				<br/>
				<fieldset><legend>Meus Itens</legend>
				<h:panelGrid columns="3">
				<h:dataTable value="#{carrinhoBean.lista}" var="car" rules="rows" >  
                <f:facet name="caption">  
                    <br />  
                </f:facet>  
                <f:facet name="header">Início da listagem</f:facet>  
                <f:facet name="footer">Final da listagem</f:facet> 
               <h:column>
                    <f:facet name="header">Nome do Item</f:facet>  
                  <h:outputText value="#{car.nomeItem}" /> 
                </h:column>  
                <h:column>  
                    <f:facet name="header">Qntd. Solicitada</f:facet>  
                   <h:outputText value="#{car.quantidadeItem}" /> 
                </h:column>  
                <h:column>
               <h:commandLink action= "#{carrinhoBean.remove(car)}"
				 onclick="if (!confirm('Confirma a exclusão  ?')) return false;">
					<h:graphicImage library="imagens" name="apagar.png" style="border:0" />
				</h:commandLink>
                </h:column>
            </h:dataTable> 
            </h:panelGrid>
            </fieldset>
             <br/>
             <br/>
             <h:commandButton  value="Finalizar" /> 
             <br/>
             <br/>
        </h:form>  
    </ui:define>  
</ui:composition>  
</html>  

Muito obrigado pela força :slight_smile: