Problemas ao inserir dados de um Table em outro Table

3 respostas
Diego_Adriano

Bom Galera, o problema é o seguinte:
Eu tenho uma tabela de Produtos, onde eu posso selecionar um Produto e inserir ele em um ArrayList que representa a Lista de Venda.
Bem eu consigo inserir normalmente, porém quando vou inserir o segundo item ao invés de o Array inserir o segundo item ele esta criando outro ArrayList assim exibindo somente o que foi escolhido naquele momento:
Vou postar o Código.
Produtos a Serem selecionados:

<p:dialog id="JanelaProduto" widgetVar="janelaProduto" width="1024" 
						  position="center" modal="true" closeOnEscape="true"
  						  minWidth="600" >
  						
	  				<h:form id="tabelaProduto">
	  					<p:outputPanel id="Painel" >	
	  						<p:dataTable paginator="true"
										 paginatorPosition="bottom"
										 rows="20"
										 value="#{produtoBean.produtos}"
										 var="produto"
										 emptyMessage="Nenhum Produto Cadastrado !"
										 update="dadosProduto,dadosProduto2">
					
								<p:column headerText="ID" style="width:50px;">
									<h:outputText value="#{produto.id}"/>
								</p:column>
				
								<p:column headerText="DESCRIÃ?Ã?O" sortBy="true">
									<h:outputText value="#{produto.descricao}"/>
								</p:column>	
									
								<p:column style="width:35px;">
									<f:facet name="header">
										<h:outputText value="#"/>
									</f:facet>
									<p:commandButton update="dados_Produto" ajax="false" oncomplete="janelaProduto.hide()"
													 image="ui-icon-circle-check">
										 <f:setPropertyActionListener target="#{vendaBean.produtoSelecionado}" value="#{produto}"/>
									</p:commandButton>
											
								</p:column>
								
							</p:dataTable>
							
				  		</p:outputPanel>
	  				</h:form>
  					
  			    </p:dialog>

Exibe os Produtos Selecionados:

<h:panelGrid id="dados_Produto2" columns="1" columnClasses="colunaEsquerda,colunaDireita">
												
												<p:commandButton image="ui-icon-search" action="update" 
																	 ajax="true" immediate="true" oncomplete="janelaProduto.show()"/>
											</h:panelGrid>
																 
												<p:dataTable id="dados_Produto"  
														 paginator="true"
														 paginatorPosition="bottom"
														 rows="10"
														 value="#{vendaBean.vendas}"
														 var="venda"
														 emptyMessage="Nenhuma Venda Efetuada !">
																					
												
													<p:column headerText="Cód." style="width:30px;">
														<h:outputText value="#{venda.produto.id}"/>
													</p:column>
													
													<p:column headerText="Descrição">
														<h:outputText value="#{venda.produto.descricao}"/>
													</p:column>
													
													<p:column headerText="U.M" style="width:30px;">
														<h:outputText value="#{venda.produto.unidade_medida}"/>
													</p:column>
													
													<p:column headerText="Qtd" style="width:30px;">
														<p:cellEditor>
															<f:facet name="output">
																<h:outputText value="#{venda.quantidade}"/>
															</f:facet>
															<f:facet name="input">
																<p:inputText value="#{venda.quantidade}"/>
															</f:facet>	
														</p:cellEditor>	
													</p:column>
													
													<p:column headerText="P.Uni" style="width:30px;">
															<p:cellEditor>
															<f:facet name="output">
																<h:outputText value="#{venda.vlrUnit}"/>
															</f:facet>
															<f:facet name="input">
																<p:inputText value="#{venda.vlrUnit}"/>
															</f:facet>	
														</p:cellEditor>
													</p:column>
													
													<p:column headerText="Total" style="width:40px;">
															<p:cellEditor>
															<f:facet name="output">
																<h:outputText value="#{venda.vlrTotal}"/>
															</f:facet>
															<f:facet name="input">
																<p:inputText value="#{venda.vlrTotal}"/>
															</f:facet>	
														</p:cellEditor>
													</p:column>
													
													<p:column>
														<p:rowEditor/>
													</p:column>	
												</p:dataTable>

Bean
Uso o "produtoSelecionado" para inserir na List de Vendas !!

public class VendaBean implements Serializable{

	private EntityManager entityManager;
	private Cliente clienteSelecionado;
	private Produto produtoSelecionado;
	private Plano   planoSelecionado;
	private Funcionario funcionario;
	private Venda venda;
	private List<Produto> produtos;
	private List<Venda> vendas = new ArrayList<Venda>();
	Double quantidade;


        public List<Venda> getVendas() {
		
		System.out.println("GETVendas");
		for (Venda v : vendas)
			System.out.println("Size: "+ vendas.size() +" | Item: "+v.getProduto().getDescricao());
		
		return vendas;
		
	}

        public void setProdutoSelecionado(Produto produtoSelecionado) {
		System.out.println("SET PRODUTO SELECIONADO: "+ produtoSelecionado.getDescricao());
		this.produtoSelecionado = produtoSelecionado;
		
			venda = new Venda();
			
	    	        System.out.println("SPS -> VENDAS");
			this.venda.setProduto(this.produtoSelecionado);
			this.vendas.add(venda);
				
			this.produtoSelecionado = new Produto();
			this.venda = new Venda();
				
	}
	public Plano getProdutoSelecionado() {
		System.out.println("GET PRODUTO SELECIONADO");
		return produtoSelecionado;
	}
}

Se alguem puder me ajudar agradeço ...

3 Respostas

E

Seu MB é RequestScoped ? Se for tente usar ViewScoped.

Diego_Adriano

Esqueci de postar esse detalhe .. ele é de Session

/**
 * @author Diego
 *
 */
@ManagedBean
@SessionScoped
public class VendaBean implements Serializable
Diego_Adriano

Bem já entendi o problema … mas não consigo resolver …
A que acontece é o seguinte …
Eu escolho o primeiro Objeto(Produto), então é criado um ArrayList para receber o mesmo, ate então beleza …
Quando vou escolher o segundo produto ele apenas teria que inserir no Array já criado, porém o JSF esta criando um NOVO ARRAY, mas não sei como resolver isso, se o Escopo fosse de Request ou View tudo bem, pois seria tudo reprocessado mas é de Session então ele teria que manter o Objeto “VIVO” …
Se alguem tiver ideia de como resolver isso agradeço …

Criado 15 de setembro de 2011
Ultima resposta 20 de set. de 2011
Respostas 3
Participantes 2