Como fazer um Filtro por Data de Cadastro no DataTable do PrimeFaces

17 respostas
W
@SuppressWarnings("unchecked")
	@Transactional(readOnly=true)
	public List<Cadastro> findByData(Date nomeCadastroTeste){
		
		String jpql = " SELECT cad from Cadastro cad where dataCadastro like :dataCadastro order by cad.dataCadastro";
		Query query = entityManager.createQuery(jpql);
		query.setParameter("dataCadastro", nomeCadastroTeste + "%");
		
		List<Cadastro> cadastros = (List<Cadastro>) query.getResultList();
		return cadastros;
		
	}
public List<Cadastro> getCadastroTestesByData(Date nomeCadastro) {

		return dao.findByData(nomeCadastro);

	}
public void filtrarCadastroData(AjaxBehaviorEvent event) {
		if (nomeCadastroData != null) {
			cadastros = model.getCadastroTestesByData(nomeCadastroData);
		} else {
			cadastros = model.getAllCadastroTestes();
		}
	}
<h:form id="formPesquisa" rendered="#{!cadastroTesteBean.editMode}">
		<p:panelGrid columns="2">
			<h:panelGroup>
				<h:outputText value="Filtro:" />
				<h:inputText maxlength="30" size="30" value="#{cadastroTesteBean.nomeCadastroTeste}">
					<f:ajax event="keyup" render="resultados"
						listener="#{cadastroTesteBean.filtrarCadastroData}" />
				</h:inputText>
			</h:panelGroup>
		</p:panelGrid>
		<p:dataTable value="#{cadastroTesteBean.cadastros}" var="cad" id="resultados" border="1" paginator="true" rows="10"  
                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                 rowsPerPageTemplate="5,10,15"> 
                 
			<p:column id="modelHeader" sortBy="#{cad.matricula}">
				<f:facet name="header">Matricula</f:facet>
				<h:outputText value="#{cad.matricula}"  />
			</p:column>
			
			<p:column sortBy="#{cad.nome}">
				<f:facet name="header">Nome</f:facet>
				<h:outputText value="#{cad.nome}" />
			</p:column>
			
			<p:column>
				<f:facet name="header">Execução</f:facet>
				<h:outputText value="#{cad.execucao}" />
			</p:column>
			
			<p:column sortBy="#{cad.dataCadastro}" filterBy="#{cadastroTesteBean.filtrarCadastroData}" >
				<f:facet name="header"> Data </f:facet>
				<h:outputText  value="#{cad.dataCadastro}">
					<f:convertDateTime locale="pt_BR"/>
				</h:outputText>
			</p:column>
			
			<p:column>
				<f:facet name="header">Solicitante</f:facet>
				<h:outputText value="#{cad.solicitante.descricao}" />
			</p:column>
			
			<p:column>
				<f:facet name="header">Tipo Beneficio</f:facet>
				<h:outputText value="#{cad.beneficio.descricao}" />
			</p:column>
		</p:dataTable>
	</h:form>

Quando digito a data no h:inputText não procura pela Data de Cadastro por gentileza alguem teria um Exemplo pra me mostrar
abraços a todos e sucesso Burro não é aquele que não sabe e pergunta e sim Burro e aquele que não sabe mas finge saber pois engana a si mesmo. :smiley:

17 Respostas

L

Você chegou a ver se o nomeCadastroData chega com valor ?

W
L

Deixa eu ver se entendi.
O que não funciona é essa parte então

<p:column sortBy="#{cad.dataCadastro}" filterBy="#{cadastroTesteBean.filtrarCadastroData}" >

Por favor mostrar o método filtrarCadastroData

W
L

Porque você colocou data com like ?

Data eu acho que você pode colocar direto

String jpql = " SELECT cad from Cadastro cad where dataCadastro like :dataCadastro order by cad.dataCadastro";

query.setParameter(“dataCadastro”, nomeCadastroTeste);

L

Se ainda não funcionar vê se a consulta retorna dados

W
L

O que não deu certo ?

A sua consulta não retornou dados ?
Você quer todas as datas daquele dia não é ?

Você tirou o like ?

Se quiser entre 2 datas daí coloque between.

Como está a sua jpql ?

W
L

não falta o = não ?

String jpql = " SELECT cad from Cadastro cad where dataCadastro = :dataCadastro order by cad.dataCadastro";

E você não deveria colocar o seu ajax com onBlur, pois senão irá fazer várias consultas com datas que não existem, ou usar um componente de data que já escreve direto.

W
L

O objeto date chega na consulta ?

O seu :dataCadastro está populado com algum valor ?

W
L

Me desculpe,não entendi.
Você quer digitar uma data e filtrar pela data não é ?

W
W
L

Eu percebi que você usou o filterBy e o evento com o listener para o keyUp juntos.

Checa umas coisas para mim por favor.
No seu bean filtrarCadastroData, porque você colocou a variável nomeCadastroData para recuperar o valor da data digitada ?

Porque você não usou o event.getValue com um cast para trazer a String da data ?

Porque usou onKeyUp ? Não seria melhor associar com um clique com enter, senão faria várias consultas e só mesmo quando o cara digitar o último dígito do ano é que vai voltar algo, ou usar o inputText com algo tipo o datePicker do jqueryUI, o qual permitira o cara selecionar a data e daí preencher direto a data.

A variável chega com qual valor ?

O seu convertTime não deveria ter algo dizendo o formato da data ? eu percebi que tem o locale pt_Br, mas não precisaria dizer que a data tem formato dd/MM/yyyy

Criado 17 de agosto de 2012
Ultima resposta 23 de ago. de 2012
Respostas 17
Participantes 2