PrimeFaces dataTable

Eu criei um dataTable segundo o exemplo do site do PrimeFaces. O dataTable está sendo renderizado perfeitamente, porém os dados do BD não aparecem no dataTable.
Debugando a minha função carregarCliente os registros do banco de dados são retornados, só não sei porque não aparece no dataTable.

xhtml:
<h:form id="form">
			<p:dataTable var="cliente" value="#{clienteMB.carregarCliente()}" rowKey="#{clienteMB.cliente.id}"
						paginator="true" rows="10" selection="#{clienteMB.clienteSelecionado}" selectionMode="single"
						filteredValue="#{clienteMB.clientesFiltrados}" id="clientesTable">
						
				<p:ajax event="rowSelect" update=":form:display" oncomplete="PF('clienteDialog').show()" />
				
				<f:facet name="header">Lista de Clientes</f:facet>
				
				<p:column headerText="Id" sortBy="#{clienteMB.cliente.id}" filterBy="#{clienteMB.cliente.id}">
					#{clienteMB.cliente.id}				
				</p:column>
				<p:column headerText="Nome" sortBy="#{clienteMB.cliente.nome}" filterBy="#{clienteMB.cliente.nome}">
					#{clienteMB.cliente.nome}				
				</p:column>
				<p:column headerText="Fone" sortBy="#{clienteMB.cliente.fone}" filterBy="#{clienteMB.cliente.fone}">
					#{clienteMB.cliente.fone}				
				</p:column>
				<p:column headerText="Email" sortBy="#{clienteMB.cliente.email}" filterBy="#{clienteMB.cliente.email}">
					#{clienteMB.cliente.email}				
				</p:column>
			</p:dataTable>
			
			<p:dialog header="Cliente Detalhes" widgetVar="clienteDialog" resizable="false"
					  width="200" showEffect="explode" hideEffect="explode">
				<h:panelGrid id="display" columns="2" cellpadding="4">
					<h:outputText value="Id:" />
					<h:outputText value="#{clienteMB.clienteSelecionado.id}" id="id" />
					
					<h:outputText value="Nome" />
					<h:outputText value="#{clienteMB.clienteSelecionado.nome}" id="nome" />
					
					<h:outputText value="Fone" />
					<h:outputText value="#{clienteMB.clienteSelecionado.fone}" id="fone" />
					
					<h:outputText value="Email:" />
					<h:outputText value="#{clienteMB.clienteSelecionado.email}" id="email" />
				</h:panelGrid>
			</p:dialog>
		</h:form>

ClienteMB:

package br.com.teste.managedbean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.naming.InitialContext;
import javax.naming.NamingException;


import br.com.teste.ejb.ClienteBean;
import br.com.teste.entidade.Cliente;

@ManagedBean
@ViewScoped
public class ClienteMB {

	private Cliente cliente = new Cliente();
	private Cliente clienteSelecionado =  new Cliente();
	private List<Cliente> lstCliente =  new ArrayList<Cliente>();
	private List<Cliente> clientesFiltrados =  new ArrayList<Cliente>();
	
	public String incluirCliente(){
		InitialContext ini;
		try {
			ini = new InitialContext();
		
			ClienteBean clienteBean = (ClienteBean)ini.lookup("java:module/ClienteBean");
			
			return clienteBean.salvar(cliente);
			
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	
	public String deletarCliente(){
		InitialContext ini;
		
		try {
			ini = new InitialContext();
			
			ClienteBean clienteBean = (ClienteBean)ini.lookup("java:module/ClienteBean");
			clienteBean.deletar(getClienteSelecionado());
			
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	public String atualizarCliente(Cliente cliente){
		InitialContext ini;
		
		try {
			ini = new InitialContext();
			
			ClienteBean clienteBean = (ClienteBean)ini.lookup("java:module/ClienteBean");
			clienteBean.atualizar(cliente);
			
			cliente = new Cliente();
			lstCliente = clienteBean.buscarCliente();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	public List<Cliente> carregarCliente(){
		InitialContext ini;
		
		try {
			ini = new InitialContext();
			
			ClienteBean clienteBean = (ClienteBean)ini.lookup("java:module/ClienteBean");
			
			lstCliente = clienteBean.buscarCliente();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		return lstCliente;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Cliente> getLstCliente() {
		return lstCliente;
	}

	public void setLstCliente(List<Cliente> lstCliente) {
		this.lstCliente = lstCliente;
	}

	public Cliente getClienteSelecionado() {
		return clienteSelecionado;
	}

	public void setClienteSelecionado(Cliente clienteSelecionado) {
		this.clienteSelecionado = clienteSelecionado;
	}

	public List<Cliente> getClientesFiltrados() {
		return clientesFiltrados;
	}

	public void setClientesFiltrados(List<Cliente> clientesFiltrados) {
		this.clientesFiltrados = clientesFiltrados;
	}
	
}

ClienteBean

package br.com.teste.ejb;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import br.com.teste.entidade.Cliente;

@Stateless
public class ClienteBean {
	
	@PersistenceContext
	EntityManager em;
	
	public String salvar(Cliente cliente) {
		em.persist(cliente);
		return "PaginaListarCliente";
	}
	
	public void deletar(Cliente cliente) {
		em.remove(em.getReference(Cliente.class, cliente.getId()));
	}
	
	public void atualizar(Cliente cliente) {
		em.merge(em.getReference(Cliente.class, cliente.getId()));
	}
	
	@SuppressWarnings("unchecked")
	public List<Cliente> buscarCliente(){
		return em.createQuery("FROM Cliente").getResultList();
	}
}

Galera, já estou ficando louco de tentar achar o erro. Estranho que o método retorna dados só não exibe na dataTable.

Ali nos p:column, você não usa o bean. Você usa o var que foi definido no dataTable (#{cliente.nome} #{cliente.id} etc.). Dá uma revisada no showCase.

A sim, após carregar os valores ficam na minha variável “cliente”. Mas mesmo realizando as alterações continua não exibindo os valores.

<!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://java.sun.com/jsf/html"
		xmlns:f="http://java.sun.com/jsf/core" 
		xmlns:p="http://primefaces.org/ui"
		xmlns:ui="http://java.sun.com/jsf/facelets"> 
		
	<h:head> 
		<title>Menu</title>
		<link rel="stylesheet" type="text/css" href="#{facesContext.externalContext.requestContextPath}/CSS/menu.css" />
		<link rel="stylesheet" type="text/css" href="#{facesContext.externalContext.requestContextPath}/CSS/table.css" /> 
	</h:head> 
	<h:body>
		<ui:include src="/pages/menu/Menu.xhtml" />
		<div class="space" />
		<h:form id="form">
			<p:dataTable var="cliente" value="#{clienteMB.carregarCliente()}" rowKey="#{clienteMB.cliente.id}"
						paginator="true" rows="10" selection="#{clienteMB.clienteSelecionado}" selectionMode="single"
						filteredValue="#{clienteMB.clientesFiltrados}" id="clientesTable">
						
				<p:ajax event="rowSelect" update=":form:display" oncomplete="PF('clienteDialog').show()" />
				
				<f:facet name="header">Lista de Clientes</f:facet>
				
				<p:column headerText="Id" sortBy="#{cliente.id}" filterBy="#{cliente.id}">
					#{cliente.id}				
				</p:column>
				<p:column headerText="Nome" sortBy="#{cliente.nome}" filterBy="#{cliente.nome}">
					#{cliente.nome}				
				</p:column>
				<p:column headerText="Fone" sortBy="#{cliente.fone}" filterBy="#{cliente.fone}">
					#{cliente.fone}				
				</p:column>
				<p:column headerText="Email" sortBy="#{cliente.email}" filterBy="#{cliente.email}">
					#{cliente.email}				
				</p:column>
			</p:dataTable>
			
			<p:dialog header="Cliente Detalhes" widgetVar="clienteDialog" resizable="false"
					  width="200" showEffect="explode" hideEffect="explode">
				<h:panelGrid id="display" columns="2" cellpadding="4">
					<h:outputText value="Id:" />
					<h:outputText value="#{clienteMB.clienteSelecionado.id}" id="id" />
					
					<h:outputText value="Nome" />
					<h:outputText value="#{clienteMB.clienteSelecionado.nome}" id="nome" />
					
					<h:outputText value="Fone" />
					<h:outputText value="#{clienteMB.clienteSelecionado.fone}" id="fone" />
					
					<h:outputText value="Email:" />
					<h:outputText value="#{clienteMB.clienteSelecionado.email}" id="email" />
				</h:panelGrid>
			</p:dialog>
		</h:form>
	</h:body> 
</html>

No bean, onde você declara clientesFiltrados, não inicialize. Deixe sem nada:

Se você coloca um array vazio, é como se estivesse fazendo um filtro inicial…

1 curtida

[quote=Roselito Fávero da Silva]No bean, onde você declara clientesFiltrados, não inicialize. Deixe sem nada:

Se você coloca um array vazio, é como se estivesse fazendo um filtro inicial…[/quote]

Obrigado. Funcionou!
Também tive que retirar o selectionMode=“single” estava caindo exceção que eu precisava implementar a interface.