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