drsmachado:
Kleber-rr:
drsmachado:
Pode haver uma maneira mais adequada, porém, eu apenas substituiria o espaço entre as palavras por "%" e mandaria uma única String para o criteria buscar.
Exato, porém gostaria de substituir o "%" pelo "+", já que este é mais familiar para o usuário.
Muito obrigado pela dica.
É que o coringa das consultas SQL é o %. Então, mandando um "%", a princípio, o Criteria deverá retornar qualquer nome que possua "João" no começo e termine com "Sauro".
Portanto, o usuário pode digitar "João Sauro" com espaço entre as palavras, aí, cabe à tua lógica, trocar (replace?) o espaço pelo %.
Então drsmachado, obrigado pelas dicas.
Estou tentando fazer isto que vc me disse, dentro do meu método list no bean. Só que ele me retorna um erro NullpointerException na linha do name.replaceAll("\\ ", "%");. POde-se verificar a expressão abaixo:
public List<Funcionario> getFuncionariosGenerico() {
Session session = HibernateUtil.currentSession();
FuncionarioDao funcionarioDao = new FuncionarioDao(session,
Funcionario.class);
String name = this.getFuncionario().getNome();
if (name != ""
|| this.getFuncionario().getCpf() != ""
|| this.getFuncionario().getRg() != "") {
name.replaceAll("\\ ", "%");
List<Funcionario> lista = funcionarioDao.pesquisaFuncionarios(name,
this.getFuncionario().getCpf(), this.getFuncionario()
.getRg());
return lista;
} else {
return null;
}
}
A exception:
Caused by: java.lang.NullPointerException
at br.gov.rr.setrabes.handler.ConsultasHandler.getFuncionariosGenerico(ConsultasHandler.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
at org.apache.el.parser.AstValue.getValue(AstValue.java:118)
at org.apache.el.parser.AstEmpty.getValue(AstEmpty.java:45)
at org.apache.el.parser.AstNot.getValue(AstNot.java:42)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
... 45 more
Ele disse que o name.replaceAll é nulo... Acho que ele quer fazer a substituição antes de ser preenchido o campo... tentei fazer esta implementação no DAO, e dá erro tb...
Caused by: java.lang.NullPointerException
at br.gov.rr.setrabes.dao.FuncionarioDao.pesquisaFuncionarios(FuncionarioDao.java:126)
at br.gov.rr.setrabes.handler.ConsultasHandler.getFuncionariosGenerico(ConsultasHandler.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
at org.apache.el.parser.AstValue.getValue(AstValue.java:118)
at org.apache.el.parser.AstEmpty.getValue(AstEmpty.java:45)
at org.apache.el.parser.AstNot.getValue(AstNot.java:42)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
... 45 more
O método no DAO:
@SuppressWarnings("unchecked")
public List<Funcionario> pesquisaFuncionarios(String nome, String cpf,
String rg) {
Criteria c = session.createCriteria(Funcionario.class);
String name = nome;
name.replaceAll("\\ ", "%");
List<Funcionario> results = new ArrayList<Funcionario>();
c.add(Restrictions.ilike("nome", name, MatchMode.ANYWHERE));
c.add(Restrictions.like("cpf", cpf, MatchMode.ANYWHERE));
c.add(Restrictions.like("rg", rg, MatchMode.ANYWHERE));
c.addOrder(Order.asc("nome"));
results = (List<Funcionario>) c.list();
return results;
}
Eae pessoal, alguma luz???
Vlw.