Pesquisar tipo de dados diferentes no mesmo inputText

4 respostas
jsfjavamysqlhibernate
sgrandini

Olá pessoal!

Como faço para realizar uma pesquisa num inputText usando tipos de dados diferentes? Por exemplo, no mesmo input eu pesquiso nome, cpf, data de nascimento etc. Eu já tenho um método na minha classe ClienteDaoHibernate que faz a busca pelo nome, mas eu preciso que a busca seja feita por outros campos também.

Segue abaixo o método da classe ClienteDaoHibernate.

@Override
public List<Cliente> buscarPorNome(String nomeCliente) {
    Criteria criteria = sessao.createCriteria(Cliente.class);

    if (nomeCliente != null) {
        criteria.add(Restrictions.ilike("nome", nomeCliente, MatchMode.ANYWHERE));
    }
    return criteria.list();
}

4 Respostas

javaflex
@Override
public List<Cliente> buscar(Cliente filtroCliente) {
    Criteria criteria = sessao.createCriteria(Cliente.class);

    if (filtroCliente.getNome() != null) {
        criteria.add(Restrictions.ilike("nome", filtroCliente.getNome(), MatchMode.ANYWHERE));
    }
	
    if (filtroCliente.getCpf() != null) {
        criteria.add(Restrictions.ilike("cpf", filtroCliente.getCpf(), MatchMode.ANYWHERE));
    }
	
    return criteria.list();
}
sgrandini

Olá javaflex.

Está dando erro de NullPointerException. O que eu estou fazendo errado?

java.lang.NullPointerException
br.com.corretora.dao.ClienteDaoHibernate.buscar(ClienteDaoHibernate.java:64)
br.com.corretora.model.ClienteRN.buscar(ClienteRN.java:44)
br.com.corretora.controller.ClienteBean.getLista(ClienteBean.java:221)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
javax.el.BeanELResolver.getValue(BeanELResolver.java:97)
com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
javax.faces.component.UIData.getValue(UIData.java:730)
javax.faces.component.UIData.getDataModel(UIData.java:1795)
javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:483)
javax.faces.component.UIData.setRowIndex(UIData.java:472)
com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:82)
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
javax.faces.component.UIData.encodeBegin(UIData.java:1117)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1777)
javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:424)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124)
javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:100)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
br.com.corretora.util.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:31)

Segue abaixo os métodos das classes:

ClienteDao
public List buscar(Cliente filtroCliente);

<strong>ClienteDaoHibernate</strong>

<a class="mention" href="/u/override">@Override</a>

public List buscar(Cliente filtroCliente) {

Criteria criteria = sessao.createCriteria(Cliente.class);
if (filtroCliente.getNome() != null) {
        criteria.add(Restrictions.ilike("nome", filtroCliente.getNome(), MatchMode.ANYWHERE));
    }

    if (filtroCliente.getCpf_cnpj() != null) {
        criteria.add(Restrictions.ilike("cpf_cnpj", filtroCliente.getCpf_cnpj(), MatchMode.ANYWHERE));
    }

    if (filtroCliente.getEmailprincipal() != null) {
        criteria.add(Restrictions.ilike("emailprincipal", filtroCliente.getEmailprincipal(), MatchMode.ANYWHERE));
    }

    if (filtroCliente.getFixo() != null) {
        criteria.add(Restrictions.ilike("fixo", filtroCliente.getFixo(), MatchMode.ANYWHERE));
    }

    if (filtroCliente.getCelular() != null) {
        criteria.add(Restrictions.ilike("celular", filtroCliente.getCelular(), MatchMode.ANYWHERE));
    }

    return criteria.list();
}
<strong>ClienteRN</strong>

public List buscar(Cliente filtroCliente) {

return this.clienteDao.buscar(filtroCliente);

}
<strong>ClienteBean</strong>

public void buscar() {

ClienteRN clienteRN = new ClienteRN();

this.lista = clienteRN.buscar(getFiltroCliente());

}
public List<Cliente> getLista() {
    if (this.lista == null) {
        ClienteRN clienteRN = new ClienteRN();
        this.lista = clienteRN.buscar(filtroCliente);
    }
    return lista;
}
<strong>Formulário</strong>

<h:inputText class=“form-control” id=“cliente” value="#{clienteBean.filtroCliente}" />

<h:commandLink action="#{clienteBean.buscar()}" />

Além disso, o dataTable que aparecia ordenado pelo código do cliente, está agora ordenado pelo nome.

javaflex

Voce precisa debugar, informar o que está null ou já investigar porque está null.

Uma versao mais simples com base no que voce pediu da pesquisa no mesmo input:

@Override
public List<Cliente> buscar(String filtro) {
   Criteria c = sessao.createCriteria(Cliente.class);  

   if (filtro != null) {
      c.add(Restrictions.or(
         Restrictions.ilike("nome", filtro, MatchMode.ANYWHERE), 
         Restrictions.ilike("cpf_cnpj", filtro, MatchMode.ANYWHERE)
      ));
   }

   c.addOrder(Order.asc("nome"));
   return c.list();
}

Voce pode ordernar pelo voce quiser, basta especificar.

Dá uma estudada aqui: https://docs.jboss.org/hibernate/orm/3.3/reference/pt-BR/html/querycriteria.html

sgrandini

Muitíssimo obrigada, javaflex! Era isso mesmo que eu estava precisando. Funcionou direitinho. Não sei o motivo do outro código que você passou não ter dado certo. O erro de NPE já aparecia logo após o login.

Criado 24 de dezembro de 2017
Ultima resposta 26 de dez. de 2017
Respostas 4
Participantes 2