Feed Array PrimeFaces

2

Good afternoon, folks,

I have 2 related table, one of orders and another of items of the order, so I thought to feed an array with the information of the order items and on the same screen put order information and when I click the save order button it would save the request and persist the array in the database with the array information. But the array is strange, it creates and appears, but when I create another object inside it, it changes all objects from the array to the last created.     whenIenteranotheritem:

ItchangestheentireArray.

Followthecode:

XHTML:

<ui:definename="titulo">
    Novo Pedido
</ui:define>
<ui:define name="conteudo">
    <h:form>
        <p:messages id="messages" autoUpdate="true" />

        <fieldset style="float: left; margin-right: 20px;margin-bottom: 20px;">
            <legend>Dados do Pedido</legend>
            <h:panelGrid columns="2">           

            <h:outputLabel value="Data do Abertura:" for="dataAbertura" />

            <p:calendar id="dataAbertura"
                    value="#{pedidoBean.pedido.dataAbertura.time}"
                    pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo" />                                        

             <h:outputText value="Pedido Entregue: " />
            <p:selectBooleanCheckbox value="#{pedidoBean.pedido.pedidoEntregue}" />     


                <p:outputLabel value="Fornecedor:" for="fornecedor" />  

                <p:autoComplete id="fornecedor" value="#{pedidoBean.fornecedorId}" 
                            completeMethod="#{pedidoBean.completeText}" 
                            var="fornecedor" itemLabel="#{fornecedor.nome}" itemValue="#{fornecedor}"
                            converter="fornecedorConverter" 
                            forceSelection="true" >
                             <p:ajax event="itemSelect" listener="#{pedidoBean.gravarFornecedor}" process="@form"/> 
                </p:autoComplete> 


            <h:outputLabel value="Data do Fechamento:" for="dataConcluido" />

            <p:calendar id="dataConcluido"
                    value="#{pedidoBean.pedido.dataConcluido.time}"
                    pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo" />    

            </h:panelGrid>
            <br/>               
            <h:panelGrid>
            <f:facet name="footer"   style="float: right;">
                <p:commandButton value="Salvar Pedido" action="#{pedidoBean.gravarPedido}"/>
            </f:facet>
            </h:panelGrid>
        <br/>

            </fieldset>     



        <br/>   


        <fieldset style="float: left; margin-bottom: 20px; margin-top: -20px;">
            <legend>Itens do Pedido</legend>

            <h:panelGrid columns="4" style="margin-bottom: 10px;" >
            <h:form id="itensPedidos">
            <p:outputLabel value="Produto:" for="produto" />        

            <h:outputLabel value="Quantidade: " for="quantidade" />

            <h:outputLabel value="Preço: " for="preco" />

            <h:outputLabel value=""/>

                <p:autoComplete id="produto" value="#{pedidoBean.produtoId}" 
                            completeMethod="#{pedidoBean.completeTextProduto}" 
                            var="produto" itemLabel="#{produto.nome}" itemValue="#{produto}"
                            converter="produtoConverter" 
                            forceSelection="true" >
                             <p:ajax event="itemSelect" listener="#{pedidoBean.gravarProduto}" 
                                process="@form"/> 
                </p:autoComplete> 


                    <p:inputText id="quantidade" value="#{pedidoBean.itensPedido.quantidade}" />    

                    <p:inputText id="preco" value="#{pedidoBean.itensPedido.valorPedido}" />    
                            </h:form>
                    <p:commandButton value="Salvar Item" action="#{pedidoBean.gravarItensPedido}" 
                     update="tabela" process="@this itensPedidos"/>

            </h:panelGrid>


            <p:dataTable value="#{pedidoBean.itensDoPedido}" var="itensPedido"
                    id="tabela">    
                    <p:column>
                        <f:facet name="header">Produto</f:facet>
                        <h:outputText value="#{itensPedido.produto.nome}" />
                    </p:column>
                    <p:column>
                        <f:facet name="header">Quantidade</f:facet>
                        <h:outputText value="#{itensPedido.quantidade}" />
                    </p:column>
                    <p:column>
                        <f:facet name="header">Valor Pedido</f:facet>
                        <h:outputText value="#{itensPedido.valorPedido}" />
                    </p:column>

                </p:dataTable>

</fieldset>


            <br/>           

    </h:form>



</ui:define>
</ui:composition>

RequestBean:

public class PedidoBean {

    private Fornecedor fornecedor;
    private List<Fornecedor> fornecedores;
    private Integer fornecedorId;
    private Integer produtoId;
    private int number1;   
    private String txt1;
    private Pedido pedido = new Pedido();   
    private ItensPedido itensPedido = new ItensPedido();


    /* Gravar Fornecedor */
    public List<Fornecedor> getFornecedores() {
        return new DAO<Fornecedor>(Fornecedor.class).listaTodos();
    }

    public List<Fornecedor> completeText(String query) {

        System.out.println("Entrou: ");

        this.fornecedores = new DAO<Fornecedor>(Fornecedor.class).listaTodos();
        List<Fornecedor> results =  new ArrayList<Fornecedor>();
        for(Fornecedor p : this.fornecedores) {
            if (p.getNome().startsWith(query)) {
                results.add(p);
            }
        }
        return results;
    }

    public void gravarFornecedor() {

        Fornecedor fornecedor = new DAO<Fornecedor>(Fornecedor.class).buscaPorId(this.fornecedorId);
        this.pedido.adicionaFornecedor(fornecedor);

    }

    /* Gravar Produto em itensPedido */

    private List<Produto> produtos;

    public List<Produto> completeTextProduto(String query) {

        System.out.println("Entrou: ");

        this.produtos = new DAO<Produto>(Produto.class).listaTodos();
        List<Produto> results =  new ArrayList<Produto>();
        for(Produto p : this.produtos) {
            if (p.getNome().startsWith(query)) {
                results.add(p);
            }
        }
        return results;
    }

    public void gravarProduto() {

        System.out.println("O nome do autor é: "+ produtoId);

        Produto produto = new DAO<Produto>(Produto.class).buscaPorId(this.produtoId);
        this.itensPedido.adicionaProduto(produto);
        System.out.println("O nome do produto é: "+ produto.getNome());

    }

    /*Getters and Setters */
    public Pedido getPedido() {
        return pedido;
    }

    public Integer getFornecedorId() {
        return fornecedorId;
    }

    public void setFornecedorId(Integer fornecedorId) {
        this.fornecedorId = fornecedorId;
    }

    public int getNumber1() {
        return number1;
    }

    public void setNumber1(int number1) {
        this.number1 = number1;
    }

    public String getTxt1() {
        return txt1;
    }

    public void setTxt1(String txt1) {
        this.txt1 = txt1;
    }

    public Fornecedor getFornecedor() {
        return fornecedor;
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
    }

    public String getNomeFornecedor (){
        return fornecedor.getNome();
    }

    public Integer getProdutoId() {
        return produtoId;
    }

    public void setProdutoId(Integer produtoId) {
        this.produtoId = produtoId;
    }
    /////Getters Setters    
    public List<ItensPedido> getItensPedidos() {
        return new DAO<ItensPedido>(ItensPedido.class).listaTodos();
    }

    public List<ItensPedido> getItensDoPedido(){
        return this.pedido.getItensPedido();
    }

    public List<Pedido> getPedidos() {
        return new DAO<Pedido>(Pedido.class).listaTodos();
    }

    public ItensPedido getItensPedido() {
        return itensPedido;
    }

    public void setItensPedido(ItensPedido itensPedido) {
        this.itensPedido = itensPedido;
    }

    /////Metodos
    public void gravarItensPedido() {
        System.out.println ("Agora vai: " + itensPedido.getValorPedido());
        System.out.println ("Agora vai: " + pedido.getItensPedido());
        this.pedido.adicionaItensPedido(itensPedido);
    }

}
    
asked by anonymous 23.12.2015 / 18:35

1 answer

0

Oops, of course:

'public class Items OrderedBean implements Serializable {

private Produto produto;
private List<Produto> produtos;
private Integer produtoId;
private String txt1;
private ItensPedido itensPedido = new ItensPedido();
private List<ItensPedido> itensPedidos = new ArrayList<ItensPedido>();
private int number1;    
private Pedido pedido;

public List<ItensPedido> getItensPedidos() {
    return itensPedidos;
}

public void setItensPedidos(List<ItensPedido> itensPedidos) {
    this.itensPedidos = itensPedidos;
}

public Integer getProdutoId() {
    return produtoId;
}

public void setProdutoId(Integer produtoId) {
    this.produtoId = produtoId;
}

public ItensPedido getItensPedido() {
    return itensPedido;
}

public List<Produto> getProdutos() {
    return new DAO<Produto>(Produto.class).listaTodos();
}

public List<Produto> completeTextProduto(String query) {

    System.out.println("Entrou: ");

    this.produtos = new DAO<Produto>(Produto.class).listaTodos();
    List<Produto> results =  new ArrayList<Produto>();
    for(Produto p : this.produtos) {
        if (p.getNome().startsWith(query)) {
            results.add(p);
        }
    }
    return results;
}

public Produto getProdutosPedido (){
    return this.itensPedido.getProduto();
}



public void gravarProduto() {

    System.out.println("O nome do autor é: "+ produtoId);

    Produto produto = new DAO<Produto>(Produto.class).buscaPorId(this.produtoId);
    this.itensPedido.adicionaProduto(produto);
    System.out.println("O nome do produto é: "+ produto.getNome());

}

public List<ItensPedido> getItensDoPedidos() {
    for(int i=0;i<pedido.getItensPedido().size();i++){
          System.out.println("O item é:" + pedido.getItensPedido().get(i).getQuantidade() + pedido.getItensPedido().get(i).getProduto().getNome());  
    }   
    return this.pedido.getItensPedido();
}


public Produto getProduto() {
    return produto;
}

public void setProduto(Produto produto) {
    this.produto = produto;
}

public String getTxt1() {
    return txt1;
}

public void setTxt1(String txt1) {
    this.txt1 = txt1;
}

public int getNumber1() {
    return number1;
}

public void setNumber1(int number1) {
    this.number1 = number1;
}

public String formItensPedido(){
    return "pedido?faces-redirect=true";
}


}

Order Items Model:

@Entity 
@Embeddable

public class ItensPedido {

@Id
@GeneratedValue
private int id;
private int quantidade;
private double valorPedido;


@OneToOne(fetch=FetchType.EAGER, cascade = {CascadeType.ALL})
private Produto produto = new Produto();

public Produto getProduto() {
    return produto;
}

public void adicionaProduto(Produto produto) {
    this.produto = produto;
}
public ItensPedido (){
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public int getQuantidade() {
    return quantidade;
}

public void setQuantidade(int quantidade) {
    this.quantidade = quantidade;
}

public double getValorPedido() {
    return valorPedido;
}

public void setValorPedido(double valorPedido) {
    this.valorPedido = valorPedido;
}

}
    
23.12.2015 / 19:16