Filtro do <p:dataTable> não retorna o objeto da linha selecionado

Boa tarde a todos, venho aqui mais umas vez perdi ajuda depois de muitas tentativas em vão…

Vou descrever o problema :

Tenho um dataTable onde a ultima coluna tem um botão que redireciona para a pagina detalhes, quando eu clico no botão e sou redirecionado, eu apresento os dados do objeto selecionado usando o <f:setPropertyActionListener target="#{pessoaMB.pessoaSelecionada}" value="#{lista}"/>, isso funciona bacaninha. Já quando eu uso o filtro filterBy="#{lista.nome}" e clico no botão da linha filtrada, a pagina de detalhes vem em branco.

Segue o codigo:

XHTML da tela que contem o dataTable

<h:form> 
                <p:fieldset legend="Consultar" toggleable="true" toggleSpeed="500" collapsed="true">
                    <h:panelGrid>
                        <p:dataTable id="tablePessoa" value="#{pessoaMB.listarPessoa}" var="lista" rows="3" emptyMessage="Sem Registro" 
                                     paginator="true" cellSeparator="2">

                            <p:column filterBy="#{lista.nome}">
                                <f:facet name="header">
                                    <h:outputText value="Nome"/> 
                                </f:facet>
                                <h:outputText value="#{lista.nome}"/>
                            </p:column> 

                            <p:column>
                                <f:facet name="header">
                                    <h:outputText value="Endereço"/> 
                                </f:facet>
                                <h:outputText value="#{lista.endereco}"/>
                            </p:column>

                            <p:column>
                                <f:facet name="header">
                                    <h:outputText value="Número"/> 
                                </f:facet>
                                <h:outputText value="#{lista.numero}"/>
                            </p:column>

                            <p:column>
                                <f:facet name="header">
                                    <h:outputText value="Cidade"/> 
                                </f:facet>
                                <h:outputText value="#{lista.cidade}"/>
                            </p:column>

                            <p:column style="width:8%">
                                <f:facet  name="header">
                                    <h:outputText value="Detalhes"/>
                                </f:facet>
                                <p:commandButton id="btnDETALHES" value="Detalhes" type="submit" action="/VIEW/Doador/detalhes.xhtml" process="@form"> 
                                    <f:setPropertyActionListener target="#{pessoaMB.pessoaSelecionada}" value="#{lista}"/>

                                </p:commandButton>

                            </p:column>

                        </p:dataTable>
                    </h:panelGrid>
                </p:fieldset>
            </h:form>          

Bean

public Pessoa getPessoaSelecionada() {
        return pessoaSelecionada;
    }

    public void setPessoaSelecionada(Pessoa pessoaSelecionada) {
        this.pessoaSelecionada = pessoaSelecionada;
    }

XHTML da tela de detalhes

<h:form id="form">
                <p:fieldset legend="Detalhes" toggleable="true" toggleSpeed="500" collapsed="true">
                    <p:growl id="growl" showDetail="true" life="5000" /> <!--  sticky="true" -->
                    <h:panelGrid columns="2" id="grid">

                        <p:outputLabel value="Nome:"/>
                        <p:outputLabel value="#{pessoaMB.pessoaSelecionada.nome}"/>
                        

                        <p:outputLabel value="Endereço:" />
                        <p:outputLabel value="#{pessoaMB.pessoaSelecionada.endereco}" />
                        

                        <p:outputLabel value="Número:" />
                        <p:outputLabel value="#{pessoaMB.pessoaSelecionada.numero}" />
                        

                        <p:outputLabel value="Cidade:" />
                        <p:outputLabel value="#{pessoaMB.pessoaSelecionada.cidade}" />
                        

                        <p:outputLabel value="Telefone:" />
                        <p:outputLabel value="#{pessoaMB.pessoaSelecionada.telefone}" />
                        

                        <p:outputLabel value="Celular:" />
                        <p:outputLabel value="#{pessoaMB.pessoaSelecionada.celular}" />
                        

                        <p:outputLabel value="Email:" />
                        <p:outputLabel value="#{pessoaMB.pessoaSelecionada.email}" />
                        
                    </h:panelGrid> 

                    <h:panelGrid columns="4">
                        <p:commandButton id="btnEDITAR" value=" Editar " type="submit" action="/VIEW/Doador/alterar.xhtml"/>
                        

                        <p:commandButton value="Excluir" action="#{pessoaMB.removePessoa(pessoaMB.pessoaSelecionada)}" update="growl">
                            <p:confirm header="CONFIRMAÇÃO" message="Quer realmente excluir?" icon="ui-icon-alert" />
                        </p:commandButton>
                        <p:confirmDialog global="true" widgetVar="conf">
                            <p:commandButton value="SIM" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check"/>
                            <p:commandButton value="NÃO" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" onclick="conf.hide();"/>
                        </p:confirmDialog>
                        
                        <p:commandButton id="btnCANCELAR" value="Cancelar" type="submit" action="/VIEW/Doador/consultar.xhtml"/> 
                    </h:panelGrid>     

                </p:fieldset>
            </h:form> 

Ps: Agradesco desde já quem puder ajudar. :slight_smile:

Galera desculpa minha burrice. hehehe

Corrigi o codigo e agora funciona parcialmente.

Adicionei o filteredValue ao dataTable e o filterMatchMode=“contains” a coluna.

<h:panelGrid>
                        <p:dataTable id="tablePessoa" value="#{pessoaMB.listarPessoa}" var="lista" rows="3" emptyMessage="Sem Registro" 
                                     paginator="true" cellSeparator="2" filteredValue="#{pessoaMB.listarPessoaFiltro}">

                            <p:column filterBy="#{lista.nome}" filterMatchMode="contains">
                                <f:facet name="header">
                                    <h:outputText value="Nome"/> 
                                </f:facet>
                                <h:outputText value="#{lista.nome}"/>
                            </p:column> 
...

Adicionei ao bean a lista de filtro e seu get e set.

public List<Pessoa> listarPessoasFiltro;


public List<Pessoa> getListarPessoaFiltro() {   
        return listarPessoasFiltro;
    }

    public void setListarPessoaFiltro(List<Pessoa> listarPessoasFiltro) {
        this.listarPessoasFiltro = listarPessoasFiltro;
    }

O que acontece agora é que, após efetuar o filtro e clicar no botão detalhes, a pagina detalhes tras os dados do objeto, entretanto se eu cancelar a consulta e voltar a consultar um novo item do dataTable sem usar o filtro, ele me tras o registro anterior(o ultimo filtrado).

Alguém poderei me dar uma ajuda em relação a isso?

Obrigado.