Alimentar Array Primefaces

Asked

Viewed 125 times

2

Good afternoon Personal,

I have 2 related table, one for orders and one for order items, soon I thought to feed an array with the order item information and on the same screen put order information and when I clicked on the record request button it would save the order 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 the objects of the array to the last one created. inserir a descrição da imagem aqui when I insert another item: inserir a descrição da imagem aqui

It changes the entire Array.

Follows the code:

XHTML:

<ui:define name="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>

Pedidobean:

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);
    }

}
  • You can post the code of the Itensrequested class?

1 answer

0

Opa, of course:

`public class Itenspedidobean 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";
}


}

Model Itensrequest:

@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;
}

}
  • Is getItensPedido of your Request class sure to contain all values from the database? Why is datatable using this list.

  • And you can edit your answer, no need to add a new one to show more code :]

  • Douglas, I didn’t want him to record the items in the bank until he finished creating them all and ordering them. Ai thought to feed an array and only when the save button in the order form is triggered it saves all the items of the array in the database and the request tb. You don’t think this solution is ideal?

  • Good morning folks, Nobody? rs

Browser other questions tagged

You are not signed in. Login or sign up in order to post.