Opa moçada, procurei e nao achei nada que me ajudasse.
Estou com o seguinte problema. Tenho uma tela de venda onde os ITENS DE VENDA devem ser listados (pelo que eu vi o mais usado eh o datamodel) entao EU CARREGO A VENDA NORMALMENTE porem nao consigo jogar os ITENS DE VENDA que estão num ARRAYLIST DENTRO de um objeto VENDA.
Eu so quero listar os ITENS DA VENDA QUE EU ESTOU CARREGANDO e NAO TODOS OS ITENS DE UMA VEZ.
Obviamente voce podem perceber que eu nao sei ainda como “manusear” o dataTable por tanto se tiverem uma solução mesmo que nao envolva dataTable e etc pra mim nao importa o que eh importa eh LISTAR os itens numa tabela e manter a possibilidade de acrescentar mais itens ou ate mesmo remover itens (linhas).
Segue o codigo da pagina …
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:component xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>SGAT - Venda</title>
</h:head>
<h:body>
<p:dialog id="dlgvenda" header="Venda" widgetVar="dlgVenda" width="770"
modal="true" >
<fieldset style="border: #036fab; border-style: outset;">
<legend>Venda</legend>
<h:form id="formVenda" >
<h:panelGrid id="tabelaVenda" columns="4" cellpadding="2">
<h:outputLabel style="width: 170px; height: 20px" for="codigo" value="Código: " />
<h:inputText style="width: 220px; height: 20px" readonly="true" value="#{Venda.codigo}" />
<h:outputLabel style="width: 170px; height: 20px" for="codigo" value="Data Cadastro: " />
<h:inputText style="width: 220px; height: 20px" readonly="true" value="#{Venda.data_cadastro}" />
<h:outputLabel style="width: 170px; height: 20px" for="codigo" value="Usuário: " />
<h:inputText style="width: 220px; height: 20px" readonly="true" value="#{Venda.usuario}" />
<h:outputLabel style="width: 170px; height: 20px" for="codigo" value="Data Finalizado: " />
<h:inputText style="width: 220px; height: 20px" readonly="true" value="#{Venda.data_finalizado}" />
<h:outputLabel style="width: 170px; height: 20px" for="situacao" value="Situação: " />
<h:inputText style="width: 220px; height: 20px" readonly="true" value="#{Venda.situacao}" />
<h:outputLabel style="width: 170px; height: 20px" for="codemi" value="Código Emiente: " />
<h:inputText style="width: 220px; height: 20px" value="#{Venda.emitente.codigo}" />
<h:outputLabel style="width: 170px; height: 20px" for="rs" value="Razão Social: " />
<h:inputText style="width: 220px; height: 20px" value="#{Venda.emitente.razao_social}" />
<h:outputLabel style="width: 170px; height: 20px" for="rs" value="Código Vendedor: " />
<h:inputText style="width: 220px; height: 20px" value="#{Venda.vendedor.codigo}" />
<h:outputLabel style="width: 170px; height: 20px" for="rs" value="Nome: " />
<h:inputText style="width: 220px; height: 20px" value="#{Venda.vendedor.nome}" />
</h:panelGrid>
<fieldset style="border: #036fab; border-style: outset;">
<legend>Itens de Venda</legend>
<h:dataTable id="tabelaItemVenda" var="ItemVenda" value="#{Venda.ItensVenda}" style="height: 30px" cellpadding="15px" border="2" >
<h:column >
<f:facet name="header">
<h:outputText value="Venda"/>
</f:facet>
<h:outputText value="#{Venda.item_venda.cod_venda }" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Codigo"/>
</f:facet>
<h:outputText value="#{Venda.item_venda.codigo}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Produto"/>
</f:facet>
<h:outputText value="#{Venda.item_venda.cod_produto}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Descrição"/>
</f:facet>
<h:outputText value="#{Venda.item_venda.descricao}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Quantidade"/>
</f:facet>
<h:outputText value="#{Venda.item_venda.qnt}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Valor unitário"/>
</f:facet>
<h:outputText value="#{Venda.item_venda.valor_un}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Total"/>
</f:facet>
<h:outputText value="#{Venda.item_venda.total}"/>
</h:column>
<f:facet name="footer">
<p:commandButton style="width: 100px; align: right;" value="Salvar" update="formVenda"
actionListener="#{Venda.save}" />
<p:commandButton style="width: 100px; align: right;" value="Carregar" update="formVenda"
actionListener="#{Venda.carrega}" />
<p:commandButton style="width: 100px; align: right;" value="Limpar" update="formVenda"
actionListener="#{Venda.limpar}" />
</f:facet>
</h:dataTable>
</fieldset>
</h:form>
</fieldset>
</p:dialog>
</h:body>
</ui:component>
Agora segue o codigo do Objeto VENDA
Obs: Retirei os Geters e Seteres Para economizar espaço (tenha em mente que eles Existem)
@ManagedBean(name="Venda")
@SessionScoped
public class Venda {
Integer codigo;
Utilitario data = new Utilitario();
String data_cadastro = data.getData();
String usuario;
String data_finalizado;
String situacao = "Aberta";
Emitente emitente = new Emitente();
Funcionario vendedor = new Funcionario();
//Aqui são inseridos os itens da venda
ArrayList<Item_Venda> item_venda = new ArrayList<Item_Venda>();
Double total;
Double desconto;
Double total_cdesconto;
//criei pq imaginei que seria necessario, mas esta dando um erro dizendo que ItensVenda não existe ... ja coloquei get e set dele mas continua
DataModel ItensVenda = new ListDataModel();
//Aqui vem a funcão que eu uso pra carrega os dados na tela
public void carrega(ActionEvent event){
ControlVenda bean = new ControlVenda();
ControlEmitente E = new ControlEmitente();
ControlFuncionario F = new ControlFuncionario();
Venda temp = new Venda();
if(this.codigo == null || this.codigo < 1)
this.codigo = 1;
temp = bean.buscarVenda(3);
this.codigo = temp.getCodigo();
this.data_cadastro = temp.getData_cadastro();
this.usuario = temp.getUsuario();
this.data_finalizado = temp.getData_finalizado();
this.situacao = temp.getSituacao();
this.emitente.setCodigo(temp.getEmitente().getCodigo());
this.emitente.setRazao_social(E.buscarEmitente(this.emitente.getCodigo()).getRazao_social());
this.vendedor.setCodigo(temp.getVendedor().getCodigo());
this.vendedor.setNome(F.buscarFuncionario(this.vendedor.getCodigo()).getNome());
this.ItensVenda = bean.getItensVenda(temp);
}
}
Agora vem o control que está funcionando perfeitamente ja testei os itens estao todos nos objetos venda etc etc,
public class ControlVenda {
public Integer salvaAtualiza (Venda aThis){
boolean salvou;
salvou = salvar(aThis);
if (salvou == false){
atualizar(aThis);
return 1;
}
return 0;
}
public Venda buscarVenda(Integer codVenda){
Venda temp = new Venda();
VendaDAO aux = new VendaDAO();
temp = aux.buscar(codVenda).firstElement();
return temp;
}
//NAO SEI SE ESTA FUNCIONANDO
public DataModel getItensVenda(Venda venda) {
DataModel ItensVenda;
ItensVenda = new ListDataModel(venda.getItem_venda());
return ItensVenda;
}
}
Nem colei o DAO pq nao me parece necessario, mas caso precisem me avisem que eu postarei !!!
Desde já agradeço a todos e peço caso exista algum post parecido (apesar de eu ter procurado bastante)