Ajax datatable com primefaces 3.4 [RESOLVIDO]

Pessoal, estou precisando de um help com ajax.
Pesquisei aqui no forum e no stackoverflow também mas todos os exemplos não deram certo.
ta faltando algum detalhe que não percebi, pois o botão não executa o metodo do meu managed bean e nem debugar consigo.

abaixo ta um exemplo simples do que estou tentando fazer:

testpage.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition  xmlns="http://www.w3.org/1999/xhtml"
                 xmlns:ui="http://java.sun.com/jsf/facelets"
                 template="./template.xhtml"
                 xmlns:p="http://primefaces.org/ui"
                 xmlns:h="http://java.sun.com/jsf/html"
                 xmlns:f="http://java.sun.com/jsf/core">

    <ui:define name="body">

        <h:form id="form">
            <p:ajaxStatus onstart="statusDialog.show();" onsuccess="statusDialog.hide();"/>  
            <p:panelGrid columns="2">  
                <f:facet name="header">  
                    <h:outputLabel value="TEST FILTRO" />
                </f:facet>  
                <h:outputLabel value="nome" for="descricao" />
                <h:inputText id="descricao" value="#{testBean.nome}" 
                             title="#{bundle.BancoEmpresaTitle_descricao}" />

                <f:facet name="footer">  
                    <p:commandButton type="button" value="filtra" icon="ui-icon-search"
                                    style="margin:0" action="#{testBean.filtra(item)}" 
                                    update="tabela" >
                    </p:commandButton>  
                </f:facet>  
            </p:panelGrid>  
            <br />
            <h:panelGroup rendered="#{testBean.lista.size() > 0}">
                <p:dataTable id="tabela" value="#{testBean.lista}" var="item"  style="border:solid 1px" 
                             paginator="true" rows="10" paginatorTemplate="{PageLinks}" >
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="nome"/>
                        </f:facet>
                        <h:outputText value="#{item}"/>
                    </p:column>
                </p:dataTable>
            </h:panelGroup>
        </h:form>
    </ui:define>

</ui:composition>

TestBean.java

package com.igornunes.jsf.bean;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean
@RequestScoped
public class TestBean {

    private String nome;
    private List lista;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public List getLista() {
        return lista;
    }

    public void setLista(List lista) {
        this.lista = lista;
    }

    public TestBean() {
        nome = new String();
        lista = new ArrayList();
        lista.add("aaa");
        lista.add("abc");
        lista.add("123");
        lista.add("456");
        lista.add("qwe");
        lista.add("www");
        lista.add("asd");
    }
    
    public void filtra(String item){
        //  simula filtro
        lista = new ArrayList();
        lista.add("aaa");
        lista.add("abc");
        lista.add("123");
        lista.add("456");
    }
}

desde já agradeço a ajuda.

coloca um id no seu <h:panelGroup> e altera o update do seu button, p/ ficar algo como isso:

<p:commandButton type="button" value="filtra" icon="ui-icon-search"  
                                    style="margin:0" action="#{testBean.filtra(item)}"   
                                    update=":idPanelGroup:tabela" >  
                    </p:commandButton>  

[quote=kcobainnn]coloca um id no seu <h:panelGroup> e altera o update do seu button, p/ ficar algo como isso:

<p:commandButton type="button" value="filtra" icon="ui-icon-search"  
                                    style="margin:0" action="#{testBean.filtra(item)}"   
                                    update=":idPanelGroup:tabela" >  
                    </p:commandButton>  
[/code][/quote]

não rolou não.
isso aqui é o que ta no user guide do primefaces
[code]<p:outputPanel id="out">
<p:dataTable id="tbl" rendered="#{bean.condition}" ...>
//columns
</p:dataTable>
</p:outputPanel>
<p:commandButton update="out" actionListener="#{bean.list}" />

o problema é, o seu componente “tabela” está dentro de um componente, que está dentro de um form e o seu button está dentro de outro componente diferente do tabela, você só pode fazer sem referenciar toda a hierarquia quando estiverem dentro de um componente, então tenta no update = “:form:idPanelGroup:tabela”

1 curtida

eu estou vendo errado ou são coisasd distintas, a atualização da tabela e o evento nem ser disparado, pois não entra nem no debug.
se passar o botão para [ajax=“false”] e retornar a minha pagina no metodo [return “test”;], deveria recarregar a pagina correto ?

o erro era aqui:

foi só tirar isso do botão e funcionou com ajax e entrou no debug.

é, eu não tinha visto esse type=“button”, se está resolvido, coloque um “Resolvido” no título do tópico.

[]'s