Pessoal, estou com um problema em um projeto no Eclipse: após salvar um determinado produto, esse produto aparece no banco MySQL Workbench só que não atualiza na lista do xhtml.
Segue os códigos:
Produto.xhtml
<h:form id="formulario">
<p:messages id="messages" showDetail="true" autoUpdate="true"
closable="true" />
<p:panel header="Produto">
<h:panelGrid id="gridProduto" columns="2" cellpadding="3">
<h:outputText value="Código:"></h:outputText>
<p:inputText id="codigo" style="width:350px"
value="#{produtoControle.produto.codigo}" />
<h:outputText value="Descrição:"></h:outputText>
<p:inputText id="descricao" style="width:350px"
value="#{produtoControle.produto.descricao}" />
<h:outputText value="Quantidade:"></h:outputText>
<p:inputText id="quantidade" style="width:350px"
value="#{produtoControle.produto.quantidade}" />
<h:outputText value="Preço:"></h:outputText>
<p:inputText id="preco" style="width:50px"
value="#{produtoControle.produto.preco}" />
<h:outputText value="Detalhes:"></h:outputText>
<p:inputText id="detalhes" style="width:50px"
value="#{produtoControle.produto.detalhes}" />
</h:panelGrid>
<p:commandButton id="botaoSalvar" value="SALVAR"
actionListener="#{produtoControle.salvar}"
update="formulario:gridProduto, formulario:tabelaProdutos" />
<p:commandButton id="botaoPesquisar" value="PESQUISAR"
actionListener="#{produtoControle.pesquisar}"
update="formulario:tabelaProdutos" />
<p:commandButton id="botaoLimpar" value="LIMPAR"
actionListener="#{produtoControle.limpar}"
update="formulario:gridProduto" />
</p:panel>
<p:dataTable id="tabelaProdutos"
value="#{produtoControle.listaProdutos}" var="produto"
paginator="true" rows="5">
<p:column headerText="Codigo">
<h:outputText value="#{produto.codigo}" />
</p:column>
<p:column headerText="Descricao">
<h:outputText value="#{produto.descricao}" />
</p:column>
<p:column headerText="Quantidade">
<h:outputText value="#{produto.quantidade}" />
</p:column>
<p:column headerText="Preco">
<h:outputText value="#{produto.preco}" />
</p:column>
<p:column headerText="Detalhes">
<h:outputText value="#{produto.detalhes}" />
</p:column>
</p:dataTable>
</h:form>
</h:body>
ProdutoControle.java
package controle;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import dao.ProdutoDao;
import entidade.Produto;
@ManagedBean(name = "produtoControle")
@SessionScoped
public class ProdutoControle {
private Produto produto;
private List<Produto> listaProdutos = null;
public ProdutoControle() {
produto = new Produto();
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public List<Produto> getListaProdutos() {
return listaProdutos;
}
public void setListaProdutos(List<Produto> listaProdutos) {
this.listaProdutos = listaProdutos;
}
public void salvar() {
ProdutoDao dao = new ProdutoDao();
dao.salvar(produto);
exibirMensagemSucesso(produto.getDescricao() + " salvo com sucesso!");
this.produto = new Produto();
}
public void pesquisar() {
ProdutoDao dao = new ProdutoDao();
this.listaProdutos = dao.pesquisar(produto.getDescricao());
System.out.println(this.listaProdutos);
}
public void apagar(Produto produto) {
ProdutoDao dao = new ProdutoDao();
dao.apagar(produto);
this.listaProdutos.remove(produto);
}
public void limpar() {
this.produto = new Produto();
this.listaProdutos = null;
}
private void exibirMensagemSucesso(String mensagem) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO, null, mensagem));
}
}
ProdutoDao.java
package dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import entidade.Produto;
import util.JpaUtil;
public class ProdutoDao {
public void salvar(Produto produto) {
EntityManager em = JpaUtil.getEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
em.persist(produto);
transaction.commit();
}
public List<Produto> pesquisar(String descricao) {
EntityManager em = JpaUtil.getEntityManager();
TypedQuery<Produto> query = em.createQuery("from Produto p where p.descricao like :descricao ", Produto.class);
return query.setParameter("descricao", descricao).getResultList();
}
public void apagar(Produto produto) {
EntityManager em = JpaUtil.getEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
em.remove(produto);
transaction.commit();
}
@SuppressWarnings("unchecked")
public List<Produto> listar() {
EntityManager em = JpaUtil.getEntityManager();
Query query = em.createQuery("from Produto");
return query.getResultList();
}
public void atualizar(Produto produto) {
EntityManager em = JpaUtil.getEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
em.merge(produto);
transaction.commit(); }
Produto.java
package entidade;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "produto")
public class Produto implements Serializable {
private static final long serialVersionUID = -2787154004939294333L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "codigo", nullable = false)
private String codigo;
@Column(nullable = false)
private String descricao;
@Column(nullable = false)
private int quantidade;
@Column(nullable = false)
private String preco;
@Column(nullable = false)
private String detalhes;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public int getQuantidade() {
return quantidade;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
public String getPreco() {
return preco;
}
public void setPreco(String preco) {
this.preco = preco;
}
public String getDetalhes() {
return detalhes;
}
public void setDetalhes(String detalhes) {
this.detalhes = detalhes;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Produto other = (Produto) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
return "Produto [id=" + id + ", codigo=" + codigo + ", quantidade=" + quantidade + ",preco=" + preco + ", detalhes="
+ detalhes + "]";
}
Alguém sabe como resolver?!