Boa tarde galera,
Pessoal é o seguinte queria saber se tem como no filter do p:datable do primefaces fazer um like,
pois tenho uma coluna dataVecimento(ex: 23/04/2013), que se o usuario digitar : “04” ele trazer todos desse mes?
Grato.
Jonathas.
Cria um metodo no seu bean, onde ele pega o campo data e monta a consulta no banco usando to_date(campoData,‘mm’), pra isso, vc vai ter que testar se a data está formatada ou se estão chegando somente dois digitos no campo.
Segue um exemplo, mas no exemplo eu não uso data, acho que pode ajudar:
public void listCardapios() {
System.out.println("CardapiosBean:listCardapios() - empresa: " + empresa.getFantasia());
ArrayList array = new ArrayList();
// seta i = 1, pois o 0 (zero) do array é a query
int i = 1;
String query;
query = "select e from DlvCardapios e WHERE e.acsEmpresa.idEmpresa = :idEmpresa ";
array.add(0, query);
// seta os parametro empresa
System.out.println("EntregadoresBean:listCliente() - vai incluir array posição 1");
array.add(i,"idEmpresa");
i++;
System.out.println("EntregadoresBean:listCardapio() - incluiu array posição 1");
array.add(i,empresa.getIdEmpresa());
// sesta os parametros da tela, se houver
if (tipoCardapio != null) {
System.out.println("EntregadoresBean:listCliente() - tipoCardapio não é nulo");
// inclui na query a chamada do parametro da tela
query = (query + "and e.dlvTipoCardapio.idTipoCardapio = :tipoCardapio ");
array.set(0, query);
// seta o parametro
i++;
array.add(i,"tipoCardapio");
i++;
array.add(i,tipoCardapio.getIdTipoCardapio());
} if (!"".equals(nomeCardapio)) {
String nomeLike = "%" + nomeCardapio + "%";
System.out.println("EntregadoresBean:listCliente() - nomeCardapio não é nulo");
query = (query + "and cardapio like :nomeLike ");
array.set(0, query);
i++;
array.add(i,"nomeLike");
i++;
array.add(i,nomeLike);
}
// inclui na query a ordenação
query = (query + "order by cardapio");
array.set(0, query);
// popula listClientes chamando o metodo executeHql
try {
listCardapios = executeHql(array);
} catch (Exception ex) {
Logger.getLogger(CardapiosBean.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("CardapiosBean.listCardapios(): entrando no loop para conferencia");
for (int t = 0; t < listCardapios.size(); t++) {
System.out.println("CardapiosBean.listCardapios(): " + listCardapios.get(t).getCardapio());
}
}
/**
* Este método serve para passar parâmetros para a query, podem ser passados quantos parâmetros for necessário, basta passar um array para o método.
* @param parametros - Passar um array de objetos.
* Posições:
* Na posição 0 deve passar a string com o sql, ex.: "SELECT t FROM Teste WHERE t.codigo = :codigo"
* Na posição 1 deve passar a string com o nome do parâmetro, ex.: "codigo"
* Na posição 2 deve passar o parâmetro independente do tipo, ex.: 1500
* Nas demais posições devem seguir os passos 1 e 2 sempre nessa sequência deixando apenas a posição 0 com o sql.
* ArrayList array = new ArrayList();
* array.add(0,"SELECT t FROM Teste WHERE t.codigo = :codigo");
* array.add(1,"codigo");
* array.add(2,1500);
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public List<DlvCardapios> executeHql(ArrayList<String> parametros)throws Exception{
try{
Query q = session.createQuery(parametros.get(0).toString());
for(int i=1; i < parametros.size(); i++){
q.setParameter(parametros.get(i).toString(), parametros.get(i+1));
i++;
}
return q.list();
}catch(Exception e){
throw new Exception(e);
}
}
O metodo listCardapio é o que preenche a propriedade List que será usada no table
O metodo executeHql eu uso pra poder montar a consulta dinamicamente de acordo com os parametros preenchidos na tela de consulta
mas he que tem que ser no proprio filter do componente, t
sendo que o filterBy nao serve pois tenho que usar um filtro com like, no proprio datatable sem precisa criar um outro campo. entenderam?