GARANTIR DESCONTO

Fórum PrimeFaces DataTable com selection e filter, problema ao utilizar o filtro #490750

30/08/2014

0

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

Bruno Santana

Responder

Posts

30/08/2014

Ronaldo Lanhellas

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!


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".
Responder

Gostei + 0

30/08/2014

Bruno Santana

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

Gostei + 0

30/08/2014

Ronaldo Lanhellas

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!


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;
Responder

Gostei + 0

30/08/2014

Bruno Santana

Huum, veja Ronaldo, esse é meud DataTable (apenas com a coluna id e nome pra reduzir o tópico...)

<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}"
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
filterBy="#{usr.usuNome}"
e
filterMatchMode="contains"
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 !
Responder

Gostei + 0

30/08/2014

Ronaldo Lanhellas

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

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

Gostei + 0

30/08/2014

Bruno Santana

Valeu Ronaldo!!! Vou tentar aplicar aqui, quando resolver esse problema posto aqui a solução pros demais!

Obrigado pela atenção!!!!
Responder

Gostei + 0

30/08/2014

Ronaldo Lanhellas

Valeu Ronaldo!!! Vou tentar aplicar aqui, quando resolver esse problema posto aqui a solução pros demais!

Obrigado pela atenção!!!!


De nada, tente ai e veja até onde consegue chegar.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar