LazyDataModel Classe Generica

1 resposta
E

Pessoal, fiz a rotina abaixo, e gostaria de criar uma classe generica, pois vou usar essa rotina em varios lugares do sistema.
Como eu poderia criar uma classe generica ??

usuariosList = new LazyDataModel<Cadusu>() {
            @Override
            public List<Cadusu> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
                int paginacao;
                paginacao = 0;
                for (Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
                    String filterProperty = it.next(); // table column name = field name

                    String filterValue = filters.get(filterProperty);

                    String Clausula = "and u." + filterProperty + " like'%" + filterValue + "%'";
                    paginacao = 1;
                    cadusu = cadususervico.buscafindCadusu(first, pageSize, Clausula);

                }

                if (paginacao == 0) {
                    cadusu = cadususervico.buscafindCadusu(first, pageSize, "");
                }

                return cadusu;
            }
        };
        usuariosList.setRowCount(cadususervico.buscacountCadusuTotal());

1 Resposta

L

Vc pode criar uma classe generica extendendo o LazyDataModel do primefaces, assim sobrescrevendo o metodo load() vc cria um método para realizar a busca generica:

// O <T> seria a sua entidade generica da sua lista que ira retornar
@Override  
    public List<T> load(int i, int i1, String string, SortOrder so, Map<String, String> map) {
       List load = seuServicoGenerico.buscaCampos(); //Na assinatura do método vc passa os campos que vc quer filtrar e retorna a lista filtrada;
     }
    return load;
}

Seu serviço que ira realizar a busca é generico então com isso vc tem que passar pelo generics para ele saber a quem buscar, ficaria algo parecido com isso :

public class seuDataTableGenerico<T, S extends ServicoGenerico> extends LazyDataModel<T>{

protected S seuServicoGenerico;

public seuDataTableGenerico(S servico) {
        this.seuServicoGenerico = servico;
    }

}

Lembrando que quando fizer isso, todas as suas buscas do primefaces que tiver utilizando o dataTable ira passar nesse load.

Espero ter ajudado, hehe… abras!

Criado 22 de maio de 2013
Ultima resposta 23 de mai. de 2013
Respostas 1
Participantes 2