Fórum PrimeFaces DataTable com selection e filter, problema ao utilizar o filtro #490750
30/08/2014
0
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
Curtir tópico
+ 0Posts
30/08/2014
Ronaldo Lanhellas
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
30/08/2014
Bruno Santana
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
30/08/2014
Ronaldo Lanhellas
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
30/08/2014
Bruno Santana
<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
30/08/2014
Ronaldo Lanhellas
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
30/08/2014
Bruno Santana
Obrigado pela atenção!!!!
Gostei + 0
30/08/2014
Ronaldo Lanhellas
Obrigado pela atenção!!!!
De nada, tente ai e veja até onde consegue chegar.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)