Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

p:selectOneMenu não filtra genero

Salve pessoal! Não séria uma dúvida é mais para ajudar a galera que está tendo problema nesta tarefa "Referente ao curso Java e JSF 2 - II, no capítulo Dados tabulares com Primefaces e atividade Opcional: Filtrando elementos com p:selectOneMenu".

A colega Aline abriu um tópico a mais de 2 semanas e me parece que não foi dado uma solução para dúvida da mesma, eu tentei responder no mesmo tópico porém sem sucesso.

Ao longo da aula algumas alterações foram feitas no componente DataTable afim de implementar um componente LazyDataModel e com isto no exemplo apresentado pelo professor apenas filtramos a coluna Título portanto as demais colunas inclusive a de genêro não irá funcionar se não implementamos algo na classe DAO genérico dentro do método listaTodosPaginada() e também na classe LivroDataModel e método load().

Apenas para fim de teste eu alterei a classe LivroDataModel e o método load() deixando da seguinte forma:

@Override
    public List<Livro> load(int inicio, int quantidade, String campoOrdenacao, 
                                SortOrder sentidoOrdenacao, Map<String, Object> filtros) {
        String titulo = (String) filtros.get("genero");

        return dao.listaTodosPaginada(inicio, quantidade, "genero", titulo);
    }

Enfim galera eu não cheguei a modificar o código para atender todo o filtro, mais pode ser um excelente exercício de fixação e melhoria nas futuras atualização do curso.

Um forte abraço a todos.

3 respostas

Boa João, obrigado!

Lembra também que vc pode sugerir alterações nos exercícios da aula

https://cursos.alura.com.br/suggestions/new/jsf-primefaces/15196/question

solução!

Olá João,

Muito legal a sua ideia, eu estava batendo cabeça com isso também e agora funcionou o filtro, obrigado!

Eu fiz uma alteração para poder usar o filtro em qualquer campo, dessa forma o filtro no título ou em qualquer outro campo continua funcionando:

    @Override
    public List<Livro> load(int first, int pageSize, String sortField, SortOrder sortOrder,
            Map<String, Object> filters) {

        Set<String> keySet = filters.keySet();
        String valorDigitado = null;
        String campoFiltrado = null;
        for (String key : keySet) {
            if (filters.containsKey(key))
                valorDigitado = (String) filters.get(key);
                campoFiltrado = key;
        }

        return dao.listaTodosPaginada(first, pageSize, campoFiltrado, valorDigitado);

    }

Abraços.

Fala rapaziada..

Disponha sempre que possível estarei contribuindo com a comunidade e colegas.

@Jefferson Uma dúvida na sua implementação, quando o usuário selecionar mais de dois filtros como o DAO irá retornar o valor ?

Exemplo: Consultar por título e também ISBN.