tiago_
Fevereiro 27, 2013, 7:34pm
#1
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.
tiago_
Fevereiro 27, 2013, 7:58pm
#3
[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);
}
tiago_
Fevereiro 27, 2013, 8:10pm
#5
[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
tiago_
Fevereiro 27, 2013, 11:30pm
#12
Entendi galera… To em casa agora, amanha qnd eu chegar no trabalho eu vou fazer algumas modificacoes
tiago_
Fevereiro 28, 2013, 12:44pm
#13
[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…
tiago_
Fevereiro 28, 2013, 1:26pm
#15
[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…
tiago_
Março 4, 2013, 6:41pm
#17
[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
tiago_
Março 5, 2013, 1:29pm
#19
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