Primefaces DataTable + filter Like

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

Veja se isso te ajuda:

http://www.primefaces.org/showcase/ui/datatableDynamicColumns.jsf

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?