Boa noite, estou fazendo um sistema de farmacia para me adptar com CDI, porem estou com um probleminha que não sei oque está acontecendo! Tenho a minha Classe fornecedor e lá ta tudo correto sem nenhum problema, agora tenho a minha pagina de produto e nesse produto há uma associação com fornecedor!
@SuppressWarnings("serial")
@Entity
@NamedQueries({
@NamedQuery(name = "Fornecedor.lista", query = "Select f from Fornecedor f")
})
public class Fornecedor implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo;
private String descricao;
@OneToMany(mappedBy = "fornecedor")
private List<Produto> produtos = new ArrayList<Produto>();
@SuppressWarnings("serial")
@Entity
@NamedQueries({
@NamedQuery(name = "Produto.lista", query = "Select p from Produto p join fetch p.fornecedor"),
@NamedQuery(name = "Produto.fornecedores", query = "Select f from Fornecedor f")
})
public class Produto implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo;
private String descricao;
private Integer quantidade;
private Double preco;
@ManyToOne
@JoinColumn(name = "fornecedor_codigo")
private Fornecedor fornecedor = new Fornecedor();
Porém quando adiciono um produto e quando escolho o meu fornecedor no selectOneMenu ele grava tudo certo, mas quando entro na minha view de tabela de produtos com o fornecedor, só acaba atualizando os campos do meu produto, mais quando adiciono outro produto com fornecedor a antiga que não tava aparecendo o fornecedor aparece e o novo produto que acabei de adicionar vem sem o fornecedor. E já coloquei para atualizar a minha lista. Segue o meu código.
@SuppressWarnings("serial")
@Named
@SessionScoped
public class ProdutoBean implements Serializable {
@Inject
private Produto produto;
@Inject
Mensagem mensagem;
@Inject
ProdutoDao produtoDao;
@Inject
RedirecionadorDePaginas direcao;
private List<Produto> produtos;
@Transacional
public void salvar() {
if (produto.getCodigo() == null) {
produtoDao.salvar(produto);
produtos = produtoDao.listaProdutos();
mensagem.mensagem("Produto adicionado com sucesso");
} else {
produtos = produtoDao.listaProdutos();
produtoDao.alterar(produto);
mensagem.mensagem("Produto alterado com sucesso");
}
this.produto = new Produto();
}
@Transacional
public void excluir(Produto produto) {
produtoDao.excluir(produto);
mensagem.mensagem("Produto excluido com sucesso");
this.produtos = produtoDao.listaProdutos();
}
public String carregar(Produto produto) {
this.produto = produto;
return direcao.redirecionador("produto.xhtml");
}
public String novo() {
return direcao.redirecionador("produto.xhtml");
}
public String formularioTabela() {
return direcao.redirecionador("produtoPesquisa.xhtml");
}
public List<Fornecedor> getFornecedores() {
return produtoDao.listaFornecedor();
}
public List<Produto> getProdutos() {
if (produtos == null) {
produtos = produtoDao.listaProdutos();
}
return produtos;
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
}
<?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">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/template/template.xhtml">
<ui:define name="conteudo">
<div class="ui-fluid">
<h:form id="formularioTabela">
<p:growl id="mensagem" showDetail="true" sticky="true" />
<p:dataTable id="tabelaProduto" paginator="true" rows="8"
value="#{produtoBean.produtos}" var="produto"
emptyMessage="Nenhum produto encontrado">
<f:facet name="header">Tabela Produto</f:facet>
<f:facet name="footer">
<p:commandButton value="Novo" action="#{produtoBean.novo}" />
</f:facet>
<p:column headerText="Codigo" filterBy="#{produto.codigo}"
filterMatchMode="contains" sortBy="#{produto.codigo}"
style="width: 10%">
<h:outputText value="#{produto.codigo}" />
</p:column>
<p:column headerText="Descrição" filterBy="#{produto.descricao}"
filterMatchMode="contains" sortBy="#{produto.descricao}">
<h:outputText value="#{produto.descricao}" />
</p:column>
<p:column headerText="Preço" filterBy="#{produto.preco}"
filterMatchMode="contains" sortBy="#{produto.preco}">
<h:outputText value="#{produto.preco}" />
</p:column>
<p:column headerText="Quantidade" filterBy="#{produto.quantidade}"
filterMatchMode="contains" sortBy="#{produto.quantidade}">
<h:outputText value="#{produto.quantidade}" />
</p:column>
<p:column headerText="Fornecedor"
filterBy="#{produto.fornecedor.descricao}"
filterMatchMode="contains"
sortBy="#{produto.fornecedor.descricao}">
<h:outputText value="#{produto.fornecedor.descricao}" />
</p:column>
<p:column headerText="opção" style="width:20%">
<h:panelGrid columns="2">
<p:commandButton icon="fa fa-fw fa-remove" title="Excluir"
update="formularioTabela"
actionListener="#{produtoBean.excluir(produto)}" />
<p:commandButton icon="fa fa-fw fa-edit" title="Editar"
action="#{produtoBean.carregar(produto)}" />
</h:panelGrid>
</p:column>
</p:dataTable>
</h:form>
</div>
</ui:define>
</ui:composition>
</html>
<?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">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/template/template.xhtml">
<ui:define name="conteudo">
<div class="ui-fluid">
<h:form id="formularioProduto">
<p:growl id="mensagem" showDetail="true" sticky="true" />
<p:fieldset legend="Cadastro de produto">
<h:panelGrid columns="2">
<p:outputLabel value="Descrição: " for="descricao" />
<p:inputText id="descricao"
value="#{produtoBean.produto.descricao}"
placeholder="Nome Produto" size="50" />
</h:panelGrid>
<h:panelGrid columns="2">
<p:outputLabel value="Preço: " for="preco" />
<p:inputText id="preco" value="#{produtoBean.produto.preco}" />
<p:outputLabel value="Quantidade: " for="quantidade" />
<p:inputText id="quantidade"
value="#{produtoBean.produto.quantidade}" />
<p:outputLabel value="Fornecedor: " for="fornecedor" />
<p:selectOneMenu id="fornecedor"
value="#{produtoBean.produto.fornecedor.codigo}">
<f:selectItem itemValue="" itemLabel="Selecione um fornecedor" />
<f:selectItems value="#{produtoBean.fornecedores}" var="forne"
itemLabel="#{forne.descricao}" itemValue="#{forne.codigo}" />
</p:selectOneMenu>
</h:panelGrid>
</p:fieldset>
<h:panelGrid columns="3">
<p:commandButton value="Limpar" type="reset" title="Limpar" />
<p:commandButton value="Salvar" action="#{produtoBean.salvar}"
update="formularioProduto" title="Salvar" />
<p:commandButton value="Buscar"
action="#{produtoBean.formularioTabela}" />
</h:panelGrid>
</h:form>
</div>
</ui:define>
</ui:composition>
</html>
Oque está ocorrendo?