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

11 respostas
J

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!!!

11 Respostas

B

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

J
<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.

F

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.

J

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.

F

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?

J

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

B
jximenes:
<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.

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

F

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

flw

J

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…

B

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

S

mesma coisa aqui, alguém conseguiu resolver isso ?

Criado 26 de junho de 2012
Ultima resposta 15 de out. de 2014
Respostas 11
Participantes 5