Atualmente estou no inicio do projeto, que ultiliza as seguintes tecnologias: JSF 2.0, PrimeFaces, JPA e banco de dados PostgresSQL.
O Problema é o seguinte, quando eu pego todos os objetos no banco e tento itera-los em um dataTable não funciona, o dataTable está mostrando o toString da lista.
Vamos ao código:
Entidade Produto
@Entity
@Table(name = "produtos")
public class Produtos implements Serializable {
private static final long serialVersionUID = 1L;
private static final String sequenceName = "produtos_id_seq";
@Id
@Basic(optional = false)
@SequenceGenerator(name = sequenceName, sequenceName = sequenceName)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = sequenceName)
@Column(name = "id")
private Integer id;
@Column(name = "nome")
private String nome;
@JoinColumn(name = "id_categoria", referencedColumnName = "id")
@ManyToOne(optional = false)
private Categoria categoria;
getters e setters omitidos...
Agora a metodo que me retorna a lista de todos os objetos Produto do banco
o GenericDao não tem nada d+, apenas encapsula a EntityManagerFactory
@ManagedBean
@ViewScoped
public class ProdutosDao extends GenericDao implements java.io.Serializable {
public ProdutosDao(){
}
public List<Produtos> getTodos() {
EntityManager em = super.getEntityManager();
try {
Query query = em.createQuery("SELECT p FROM Produtos p");
return query.getResultList();
} finally {
em.close();
}
}
Controller da pagina
@ManagedBean(name="testeBB")
@ViewScoped
public class TesteBackBean implements java.io.Serializable {
@ManagedProperty(value ="#{produtosDao}")
private ProdutosDao pDao;
public List<Produtos> getTodosProdutos() {
return pDao.getTodos();
}
getters e setters...
Agora a pagina
<h:body>
<h:form>
<p:dataTable var="item" value="#{testeBB.todosProdutos} " >
<p:column>
<f:facet name="header">
Produto
</f:facet>
#{item.nome}
</p:column>
</p:dataTable>
</h:form>
</h:body>
E Depois quando eu executo a página ele me gera o seguinte stackTrace:
com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SEVERE: Error Rendering View[/index.xhtml]
javax.el.ELException: /index.xhtml: Property ‘nome’ not found on type java.lang.String
at com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:81)
at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:75)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:70)
Obs: isso quando tento colocar o atributo nome #{item.nome} ou qualquer outro
Porém, quando coloco sómente o objeto #{item}
Ele itera a lista da seguinte maneira
Produto
[br.com.mercados.entidade.Produtos@1, br.com.mercados.entidade.Produtos@2]
Ou seja me parece que ele mostrou o toString da lista ao inves de iterar todos os objetos
Alguma ajuda
???, faz quase 3 semanas que tento resolver isso e não consigo.
Obrigado a todos