Instabilidade p:datatable com pagination - Primefaces

Pessoal,

alguem passou por instabilidade com o componente datatable com pagination do primefaces, pq no meu projeto estou utilizando o mesmo e está ocorrendo que quando vou navegar nos registros, os registros some, depois aparece, o botão que tem na tabela para editar tem hora q funciona e tem hora q não.

obrigado.

posta o teu código do datatable com o primefaces, tem alguma coisa que tu ta colocando demais ou de menos. O datatable do primefaces é um dos componentes mais estáveis que tem no projeto, mas ele não suporta algumas coisas, pode ser que você esteja fazendo algumas delas.

andre,

segue ai cara, e esse erro q eu to relatando, ta acontecendo em todas os datatable do meu sistema.

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
			    xmlns:h="http://java.sun.com/jsf/html"
			    xmlns:f="http://java.sun.com/jsf/core"
			    xmlns:ui="http://java.sun.com/jsf/facelets"
			  	xmlns:p="http://primefaces.prime.com.tr/ui" 
				template="/paginas/layout.xhtml">
	<ui:define name="conteudo">
		<div class="div-consulta">
            	<h:outputText id="outNome" value="Nome: " />  
            	<p:inputText id="txtNome" value="#{ClienteFacade.cliente.nome}" maxlength="100"/>
       	</div>
    	<div style="margin-left: 25%; padding: 4px;">
    		<p:commandButton id="btnPesquisar" value="PESQUISAR" actionListener="#{ClienteFacade.pesquisarClientes}" update="tblCliente"/>
    		<p:spacer height="10" width="20"/>
			<p:commandButton id="btnNovo" value="NOVO" action="#{ClienteFacade.iniciarCadastro}" ajax="false" immediate="true"/>
		</div>
		<p:dataTable id="tblCliente" var="cliente" value="#{ClienteFacade.listaClientes}" 
					 emptyMessage="" rows="10" paginator="true" paginatorPosition="bottom"
					 paginatorTemplate="{FirstPageLink} {PreviousPageLink} {NextPageLink} {LastPageLink}">  
        		<p:column style="width: 400px">  
	        	<f:facet name="header">  
	            	<h:outputText value="Nome" />  
	            </f:facet>
	            <h:outputText value="#{cliente.nome}" />  
	        </p:column>
	        <p:column style="width: 100px">  
	        	<f:facet name="header">  
	            	<h:outputText value="Telefone" />  
	            </f:facet>
	            <h:outputText value="#{cliente.telefone}" />  
	        </p:column>
	        <p:column style="width:32px">  
	            <p:commandButton action="#{ClienteFacade.editarCliente}" image="ui-icon ui-icon-search" ajax="false" immediate="true" alt="Editar Cliente" style="width:30px; height: 25px;">
	           		<f:setPropertyActionListener value="#{cliente}" target="#{ClienteFacade.cliente}"/>  
	            </p:commandButton>
	        </p:column>
    	</p:dataTable>
	</ui:define>
</ui:composition>
@Stateless
@Named("ClienteFacade")
@SessionScoped
public class ClienteFacade {
	
	@Inject
	private ClienteDAO clienteDAO;
	
	@Inject
	private UsuarioDAO usuarioDAO;
	
	@Inject
	private Cliente cliente;
	
	private List<Cliente> listaClientes;
	
	public ClienteFacade(){
		cliente = new Cliente();
	}
	
	public String iniciarConsulta(){
		cliente = new Cliente();
		listaClientes = new ArrayList<Cliente>();
		
		return TelaEnum.CLIENTE_CONSULTA.getTela();
	}
	
	public String iniciarCadastro(){
		cliente = new Cliente();
		
		return TelaEnum.CLIENTE_CADASTRO.getTela();
	}
	
	public void novoCliente(){
		cliente = new Cliente();
	}
	
	public void salvar(){
		boolean salvou = false;
		FacesMessage msg = null;
		RequestContext context = RequestContext.getCurrentInstance();
		
		if(cliente.getIdCliente() == null && clienteDAO.pesquisarClientePorNome(cliente.getNome()) != null){
			msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Nome existente.", null);
		}else{
			try {
				if(cliente.getIdCliente() == null){
					cliente.setUsuario(usuarioDAO.pesquisar(Usuario.class, 1));
					
					clienteDAO.inserir(cliente);
				}else{
					clienteDAO.alterar(cliente);
				}
				cliente = new Cliente();
				
				salvou = true;
				msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Cliente salvo com sucesso.", null);
			} catch (Exception e) {
				e.printStackTrace();
				msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ocorreu um erro no sistema.", null);
			}
		}
		
		FacesContext.getCurrentInstance().addMessage(null, msg);  
		context.addCallbackParam("salvou", salvou);
		context.addPartialUpdateTarget("msgs");
	}
	
	public void pesquisarClientes(){
		listaClientes = clienteDAO.pesquisarClientes(cliente);
	}
	
	public String voltarConsulta(){
		cliente = new Cliente();
		
		return TelaEnum.CLIENTE_CONSULTA.getTela();
	}
	
	public List<Cliente> getListaClientes() {
		return listaClientes;
	}

	public void setListaClientes(List<Cliente> listaClientes) {
		this.listaClientes = listaClientes;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	
	public String editarCliente() {
	    return TelaEnum.CLIENTE_CADASTRO.getTela();  
	}

te serei sincero cara, como é que diacho tu ta conseguindo executar esse código sem ele estar dentro de um <h:form></h:form>???
kkkkkkkkkk
a ferramenta do datatable, commandbutton, commandlink… etc de commands, são todas renderizadas e pesadas por um form, sem ter elas dentro de um form você, supostamente, não conseguiria nem executá-la.

coloque dentro de um form e veja de está acontecendo a mesma coisa.

<ui:composition xmlns="http://www.w3.org/1999/xhtml"  
                xmlns:h="http://java.sun.com/jsf/html"  
                xmlns:f="http://java.sun.com/jsf/core"  
                xmlns:ui="http://java.sun.com/jsf/facelets"  
                xmlns:p="http://primefaces.prime.com.tr/ui"   
                template="/paginas/layout.xhtml">  
    <ui:define name="conteudo">  
        <h:form>
        <div class="div-consulta">  
                <h:outputText id="outNome" value="Nome: " />    
                <p:inputText id="txtNome" value="#{ClienteFacade.cliente.nome}" maxlength="100"/>  
        </div>  
        <div style="margin-left: 25%; padding: 4px;">  
            <p:commandButton id="btnPesquisar" value="PESQUISAR" actionListener="#{ClienteFacade.pesquisarClientes}" update="tblCliente"/>  
            <p:spacer height="10" width="20"/>  
            <p:commandButton id="btnNovo" value="NOVO" action="#{ClienteFacade.iniciarCadastro}" ajax="false" immediate="true"/>  
        </div>  
        <p:dataTable id="tblCliente" var="cliente" value="#{ClienteFacade.listaClientes}"   
                     emptyMessage="" rows="10" paginator="true" paginatorPosition="bottom"  
                     paginatorTemplate="{FirstPageLink} {PreviousPageLink} {NextPageLink} {LastPageLink}">    
                <p:column style="width: 400px">    
                <f:facet name="header">    
                    <h:outputText value="Nome" />    
                </f:facet>  
                <h:outputText value="#{cliente.nome}" />    
            </p:column>  
            <p:column style="width: 100px">    
                <f:facet name="header">    
                    <h:outputText value="Telefone" />    
                </f:facet>  
                <h:outputText value="#{cliente.telefone}" />    
            </p:column>  
            <p:column style="width:32px">    
                <p:commandButton action="#{ClienteFacade.editarCliente}" image="ui-icon ui-icon-search" ajax="false" immediate="true" alt="Editar Cliente" style="width:30px; height: 25px;">  
                    <f:setPropertyActionListener value="#{cliente}" target="#{ClienteFacade.cliente}"/>    
                </p:commandButton>  
            </p:column>  
        </p:dataTable>  
      </h:form>
    </ui:define>  
</ui:composition> 

uma outra dica para que seu código fique mais elegante e menos mesclado. Ao invés de

utilize <h:panelGroup>, assim você poderá trabalhar com mais opções do jsf em uma div. O panelGroup tem a propriedade layout que pode ser definida como block (<h:panelGroup layout=“block”/>) que te viabiliza a mobilidade dele inteiro na página, igual a uma div, só que com atributos JSF, que te deixa mais bem na fita kkkk

andre,

eu não to usando esse codigo sem form, como vc pode ver, esse é uma pagina de composition, que tem um template. segue o codigo do template

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.prime.com.tr/ui">
	
	<f:view contentType="text/html">  
		<h:head>
			<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		
		    <link rel="stylesheet" type="text/css" href="../css/sistema.css" media="screen" />
		    <script type="text/javascript" src="../js/sistema.js"></script>
		</h:head>
		
		<h:body>
			<div id="cabecalho" class="cabecalho">
				CABEÇALHO
			</div>
			<h:form id="formulario">
				<p:dialog widgetVar="modalMsg" modal="true" header="INFORMAÇÕES" resizable="false" draggable="false" width="600" position="350,50">
					<p:messages id="msgs" />
				</p:dialog>
				
				<div id="menu" class="menu">
					<ul>
						<li>
							<p:commandLink id="lnkUsuario" action="#{UsuarioFacade.iniciarConsulta}" immediate="true" value="USUÁRIO" styleClass="#{facesContext.viewRoot.viewId.contains('usuario') ? 'ativo' : ''}" ajax="false" rendered="#{request.isUserInRole('ADMINISTRADOR')}"/>
						</li>
					</ul>
					<p:commandButton id="btnSair" value="SAIR" action="#{LoginFacade.deslogar}" ajax="false" immediate="true"/>
				</div>
				<div id="conteudo" class="conteudo">
					<ui:insert name="conteudo"/>
				</div>
			</h:form>
			<ui:insert name="modal"/>
		</h:body>
	</f:view>
</html>

mas valeu pela dica do panelgroup.

a resposta está aí então alisson, a resposta mora na herança do form do template. O primefaces tem problema com aninhamento e reutilização de alguns componentes cross-templates assim como cross-component (form dentro de form, etc).
deixe a importação fora de um form e no datatable chame-o em um form dentro da mesma view, assim você conseguirá até mesmo fazer a atualização (update) via ajax no componente de formulário

andre,

tirei o form de dentro do template e passei para pagina de composition, é continua instavel do msm jeito… :?

vlw