PrimeFaces DataTable com selection e filter, problema ao utilizar o filtro
Boa tarde, estou com a seguinte situação:
Possuo uma DataTable (PrimeFaces) com a opção de selection="multiple" em minha coluna assim gerando um checkbox em cada linha. Ao dar check nas linhas desejadas e após isso utilizar um dos Filters para pesquisar algum registro com mais precisão acontece que as linhas que foram selecionadas anteriormente são deselecionadas automaticamente caso a linha não apareça como resultado da filtragem.
Gostaria de manter os valores selecionados mesmo após utilizar o filtro da tabela, alguém ai tem alguma idéia ?
Obrigado, até mais!
Possuo uma DataTable (PrimeFaces) com a opção de selection="multiple" em minha coluna assim gerando um checkbox em cada linha. Ao dar check nas linhas desejadas e após isso utilizar um dos Filters para pesquisar algum registro com mais precisão acontece que as linhas que foram selecionadas anteriormente são deselecionadas automaticamente caso a linha não apareça como resultado da filtragem.
Gostaria de manter os valores selecionados mesmo após utilizar o filtro da tabela, alguém ai tem alguma idéia ?
Obrigado, até mais!
Bruno Santana
Curtidas 0
Respostas
Ronaldo Lanhellas
30/08/2014
Boa tarde, estou com a seguinte situação:
Possuo uma DataTable (PrimeFaces) com a opção de selection="multiple" em minha coluna assim gerando um checkbox em cada linha. Ao dar check nas linhas desejadas e após isso utilizar um dos Filters para pesquisar algum registro com mais precisão acontece que as linhas que foram selecionadas anteriormente são deselecionadas automaticamente caso a linha não apareça como resultado da filtragem.
Gostaria de manter os valores selecionados mesmo após utilizar o filtro da tabela, alguém ai tem alguma idéia ?
Obrigado, até mais!
Possuo uma DataTable (PrimeFaces) com a opção de selection="multiple" em minha coluna assim gerando um checkbox em cada linha. Ao dar check nas linhas desejadas e após isso utilizar um dos Filters para pesquisar algum registro com mais precisão acontece que as linhas que foram selecionadas anteriormente são deselecionadas automaticamente caso a linha não apareça como resultado da filtragem.
Gostaria de manter os valores selecionados mesmo após utilizar o filtro da tabela, alguém ai tem alguma idéia ?
Obrigado, até mais!
Meu caro, sinto-lhe dizer mas pelo que sei é uma limitação do componente DataTable, você pode usar algumas alternativas para tentar contornar este erro, vejamos a que pensei:
1 - Antes de o usuário usar o filter você pode checar se há linhas selecionadas e gravar em uma variável qualquer, depois de realizar o filtro, você novamente aplica de forma automática com as linhas que você tem salvas. Assim você evita que elas sejam "deselecionadas".
GOSTEI 0
Bruno Santana
30/08/2014
Opa Ronaldo obrigado pela resposta, é realmente procurando pelo google parece que o primefaces funciona desse modo mesmo, vou tentar aplicar algo em cima disso baseado no que voce disse, sou bem iniciante em java, talvez seja pedir muito, mas caso vc ou algúem possua um exemplo (BÁSICO) de como fazer isso?
Faço isso através de um for nos métodos get/set da minha lista de usuarios selecionados ?! :S
No mais, valeu pela resposta!
Faço isso através de um for nos métodos get/set da minha lista de usuarios selecionados ?! :S
No mais, valeu pela resposta!
GOSTEI 0
Ronaldo Lanhellas
30/08/2014
Opa Ronaldo obrigado pela resposta, é realmente procurando pelo google parece que o primefaces funciona desse modo mesmo, vou tentar aplicar algo em cima disso baseado no que voce disse, sou bem iniciante em java, talvez seja pedir muito, mas caso vc ou algúem possua um exemplo (BÁSICO) de como fazer isso?
Faço isso através de um for nos métodos get/set da minha lista de usuarios selecionados ?! :S
No mais, valeu pela resposta!
Faço isso através de um for nos métodos get/set da minha lista de usuarios selecionados ?! :S
No mais, valeu pela resposta!
Bom, pra lhe falar a verdade nunca tentei implementar isso porque nunca precisei, mas com certeza é possível, vamos pensar de forma mais técnica:
1 - No componente de filtro você deve buscar adicionar um <p:ajax event> de forma que antes que o filtro seja executado ele faça alguma ação;
2 - Nesse <p:ajax event> você chama um método no seu ManagedBean que irá armazenar os valores selecionados, guardando em um List;
3 - Adiciona um outro <p:ajax event> mas que seja executado depois do filtro, esse irá chamar um outro método que irá reatribuir os valores guardados no passo 2;
GOSTEI 0
Bruno Santana
30/08/2014
Huum, veja Ronaldo, esse é meud DataTable (apenas com a coluna id e nome pra reduzir o tópico...)
O PrimeFaces disponibiliza as opções no cabeçalho da tabela onde eu indico uma List em meu Bean para que os resultados filtrados sejam salvos lá enquanto o filtro executa certo ? E nas colunas eu possuo os e indicando como o filtro deve funcionar certo?
Quando vc diz para inserir um <p:ajax event> para o componente de filtro onde seria isso? Em qualquer lugar ? E o "antes que o filtro seja executdo ele faça uma ação" ? Desculpe a ignorancia...
Valeu, espero n estar atrapalhando seu sábado !
<p:dataTable id="tblUsuariosNovoGrupo" var="usr" value="#{utilitarioPesquisarUsuario.usuarios}" rowKey="#{usr.usuId}" widgetVar="tblUsuariosNovoGrupo" filteredValue="#{utilitarioPesquisarUsuario.usuariosFiltrados}" selection="#{utilitarioCadastrarGrupotrabalho.usuariosSelecionados}" paginator="true" paginatorPosition="bottom" rows="20" resizableColumns="true" emptyMessage="#{msgs['pesquisarUsuario.usuarioNaoEncontrado']}" styleClass="pesquisarUsuarioDataTable">
<p:column sortBy="#{usr.usuId}" filterBy="#{usr.usuId}"
headerText="ID" filterMatchMode="contains"
styleClass="pesquisarUsuarioColId"
filterStyleClass="pesquisarUsuarioColIdFilter">
<h:outputText value="#{usr.usuId}" />
</p:column>
<p:column sortBy="#{usr.usuNome}" filterBy="#{usr.usuNome}"
headerText="#{msgs['pesquisarUsuario.headerNome']}"
filterMatchMode="contains" styleClass="pesquisarUsuarioColNome"
filterStyleClass="pesquisarUsuarioColNomeFilter">
<h:outputText value="#{usr.usuNome}" />
</p:column>O PrimeFaces disponibiliza as opções
filteredValue="#{utilitarioPesquisarUsuario.usuariosFiltrados}"filterBy="#{usr.usuNome}"filterMatchMode="contains"
Quando vc diz para inserir um <p:ajax event> para o componente de filtro onde seria isso? Em qualquer lugar ? E o "antes que o filtro seja executdo ele faça uma ação" ? Desculpe a ignorancia...
Valeu, espero n estar atrapalhando seu sábado !
GOSTEI 0
Ronaldo Lanhellas
30/08/2014
Bom, primeiro você tem que fazer um teste para ver se essa solução vai funcionar. Usando o <p:ajax event> (Como mostrado abaixo) chame algum método do seu ManagedBean em modo de depuração, se este método for chamado depois do filtro ser aplicado então significa que esse <p;ajax event> funciona, ai você podemos partir para a próxima etapa:
Lembre-se que isso é apenas um protótipo para tentar contornar aquele bug do primefaces, sendo assim você vai ter que testar as possibilidades até dar certo, lhe passei o caminho :D
Lembre-se que isso é apenas um protótipo para tentar contornar aquele bug do primefaces, sendo assim você vai ter que testar as possibilidades até dar certo, lhe passei o caminho :D
<p:dataTable id="tblUsuariosNovoGrupo" var="usr" value="#{utilitarioPesquisarUsuario.usuarios}" rowKey="#{usr.usuId}" widgetVar="tblUsuariosNovoGrupo" filteredValue="#{utilitarioPesquisarUsuario.usuariosFiltrados}" selection="#{utilitarioCadastrarGrupotrabalho.usuariosSelecionados}" paginator="true" paginatorPosition="bottom" rows="20" resizableColumns="true" emptyMessage="#{msgs['pesquisarUsuario.usuarioNaoEncontrado']}" styleClass="pesquisarUsuarioDataTable">
<p:ajax event="filter" oncomplete="javascriptHelloWorld();" listener="#{meuMB.metodoX()}"/>
</p:dataTable>
GOSTEI 0
Bruno Santana
30/08/2014
Valeu Ronaldo!!! Vou tentar aplicar aqui, quando resolver esse problema posto aqui a solução pros demais!
Obrigado pela atenção!!!!
Obrigado pela atenção!!!!
GOSTEI 0
Ronaldo Lanhellas
30/08/2014
Valeu Ronaldo!!! Vou tentar aplicar aqui, quando resolver esse problema posto aqui a solução pros demais!
Obrigado pela atenção!!!!
Obrigado pela atenção!!!!
De nada, tente ai e veja até onde consegue chegar.
GOSTEI 0