Problemas ao Aplicar um filtro usando filterBy de uma dataTable do PrimeFaces

Pessoal… estou com um probleminha… eu tenho uma dataTable do primeFaces e utilizo o filterBy para pesquisa de algumas informações… cada linha da minha tabela tem um checkBox …

O problema é… se eu marcar algum checkBox e depois tentar aplicar um filtro … o primeFaces apaga todas as minhas linhas selecionadas…

Alguem tem ideia de como eu posso resolver isso?

Muito Obrigado pessoal!!!

posta o codigo do seu XHTML e do Controller do seu grid


 <h:form id="form" prependId="false">

        <p:dialog header="#{msg['registro.requisicao']}"
                  id="Modal"
                  widgetVar="modalSheet"
                  closable="false"
                  resizable="false"
                  position="center"
                  showEffect="fade"
                  hideEffect="fade" style="width: auto; height: auto; min-width: 830px;">


            <p:dataTable var="data"
                         value="#{controllerReg.DataModel}"
                         id="tabela"
			 paginator="true"
			rows="10"
                         selection="#controllerReg.selected}"
						 emptyMessage="#{msg['nenhum']}">

                <p:column selectionMode="multiple" style="text-align:center" />

                <p:column headerText="#{msg['registro.requisicao.data']}"
                          sortBy="#{data.dg}" style="width:110px" filterBy="#{data.dg}">
                    <h:outputText value="#{data.dg}"/>
                </p:column>

                <p:column headerText="#{msg['registro.requisicao.numero']}"
                          sortBy="#{data.sh}" style="width:110px" filterBy="#{data.sh}">
                    <h:outputText value="#{data.sh}"/>

                </p:column>

                <p:column headerText="#{msg['registro.requisicao.valores']}"
                          sortBy="#{data.req}"
                          style="text-align:center;width:155px" filterBy="#{data.req}">
                    <h:outputText value="#{registro.requisicao.data.inicio}">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                    </h:outputText>
                </p:column>

                <p:column headerText="#{msg[registro.requisicao.data.fim']}"
                          sortBy="#{data.expire}"
                          style="text-align:center;width:145px" filterBy="#{data.expire}">
                    <h:outputText value="#{data.expire}">
                        <f:convertDateTime pattern="dd/MM/yyyy"></f:convertDateTime>
                    </h:outputText>
                </p:column>

            </p:dataTable>


E meu controller tem a variavel selected e seus respectivos get e set

a variavel selected é um array…

e qdo eu aplico o filtro de pesquisa na tabela essa variavel selected chega vazia… se eu nao aplico nenhum filtro eu consigo pegar a folha q esta selecionada no checkBox.

o filterby deve renderizar a tela novamente, com isso os valores alterados e assinalados devem se perder,

tente criar uma chamada ajax no onlick da caixa para manter seu estado selecionado.

Fabio

eu adicionei no meu dataTable o seguinte codigo

<p:ajax event="filter" listener="#controllerReg.loadNewSelectedSheet}" update="tabelaFolhas"/>
<p:ajax event="rowSelect" listener="#controllerReg.rowSelect}" update="tabelaFolhas"/>
<p:ajax event="rowUnselect" listener="#controllerReg.rowUnselect}" update="tabelaFolhas"/>

ele manteve as opçoes selecionadas… mas veio outro problema… no caso de eu desmarcar uma opção… o primeFaces me devolve a variavel selected vazia e neste caso ele esta desmarcando todas as seleçoes… e eu nao estou vendo uma forma de identificar qual foi a opção desmarcada pelo usuario.

entendi seu problema, no rowUnselect se voce der 1 sysout, o que aparece no terminal? aparece o numero da linha que foi desmarcada ou nulo?

Se eu nao utilizo o filtro… ele traz a linha q permaneceu selecionada… e se eu utilizar o filtro ele vem nulo.

[quote=jximenes][code]

<h:form id=“form” prependId=“false”>

    <p:dialog header="#{msg['registro.requisicao']}"
              id="Modal"
              widgetVar="modalSheet"
              closable="false"
              resizable="false"
              position="center"
              showEffect="fade"
              hideEffect="fade" style="width: auto; height: auto; min-width: 830px;">


        <p:dataTable var="data"
                     value="#{controllerReg.DataModel}"
                     id="tabela"
		 paginator="true"
		rows="10"
                     selection="#controllerReg.selected}"
					 emptyMessage="#{msg['nenhum']}">

            <p:column selectionMode="multiple" style="text-align:center" />

            <p:column headerText="#{msg['registro.requisicao.data']}"
                      sortBy="#{data.dg}" style="width:110px" filterBy="#{data.dg}">
                <h:outputText value="#{data.dg}"/>
            </p:column>

            <p:column headerText="#{msg['registro.requisicao.numero']}"
                      sortBy="#{data.sh}" style="width:110px" filterBy="#{data.sh}">
                <h:outputText value="#{data.sh}"/>

            </p:column>

            <p:column headerText="#{msg['registro.requisicao.valores']}"
                      sortBy="#{data.req}"
                      style="text-align:center;width:155px" filterBy="#{data.req}">
                <h:outputText value="#{registro.requisicao.data.inicio}">
                    <f:convertDateTime pattern="dd/MM/yyyy" />
                </h:outputText>
            </p:column>

            <p:column headerText="#{msg[registro.requisicao.data.fim']}"
                      sortBy="#{data.expire}"
                      style="text-align:center;width:145px" filterBy="#{data.expire}">
                <h:outputText value="#{data.expire}">
                    <f:convertDateTime pattern="dd/MM/yyyy"></f:convertDateTime>
                </h:outputText>
            </p:column>

        </p:dataTable>

[/code]

E meu controller tem a variavel selected e seus respectivos get e set

a variavel selected é um array…

e qdo eu aplico o filtro de pesquisa na tabela essa variavel selected chega vazia… se eu nao aplico nenhum filtro eu consigo pegar a folha q esta selecionada no checkBox.[/quote]

a linha 18 : selection="#controllerReg.selected}" ta errada é assim selection="#{controllerReg.selected}"

o problema poderia ser realmente esse, caso tenha algum problema poste novamente!

flw

Desculpe… foi problema qdo eu copiei e colei o codigo … acho q acabei apagando antes de postar… mas aqui no meu codigo esta da forma q vc sugeriu…

eu estou pensando q possa ser algo do proprio primeFaces isso…

estou com o mesmo problema teve sucesso na solução??

mesma coisa aqui, alguém conseguiu resolver isso ?