Problemas iterar List em um dataTable JSF 2.0

2 respostas
C

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 :frowning: ???, faz quase 3 semanas que tento resolver isso e não consigo.

Obrigado a todos

2 Respostas

finotti

Segue um exemplo de tabela usando p:dataTable.
Acho que #{item.nome} tem que ficar dentro de algum componente como o <h:outputText>

&lt;p:dataTable value="#{produtoMB.listaProdutos}"
 		     id="tabelaProdutos"
	   	     var="produto"&gt;
   &lt;p:column&gt;
      &lt;h:outputText value="#{produto.id}" /&gt;	
   &lt;/p:column&gt;
   &lt;p:column&gt;
      &lt;h:outputText value="#{produto.descricao}" /&gt;	
   &lt;/p:column&gt;			
&lt;/p:dataTable&gt;
C

finotti:
Segue um exemplo de tabela usando p:dataTable.
Acho que #{item.nome} tem que ficar dentro de algum componente como o <h:outputText>

&lt;p:dataTable value="#{produtoMB.listaProdutos}" id="tabelaProdutos" var="produto"&gt; &lt;p:column&gt; &lt;h:outputText value="#{produto.id}" /&gt; &lt;/p:column&gt; &lt;p:column&gt; &lt;h:outputText value="#{produto.descricao}" /&gt; &lt;/p:column&gt; &lt;/p:dataTable&gt;

é que como estou ultilizando jsf 2.0 não há a necessidade da ultilização do h:outputText para renderizar um texto.

[]s

Criado 31 de agosto de 2010
Ultima resposta 1 de set. de 2010
Respostas 2
Participantes 2