1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Filtros extras no DataTable do PrimeFaces com LazyDataModel

Olá.

Tenho uma tabela (DataTable do PrimeFaces) em que implementei o LazyDataModel. Nessa tabela estou usando o rowExpansion. Também estou implementando filtros.

Segue como está o xhtml da tabela.

<p:dataTable id="lazyDataTableFuncionarios" lazy="true"
            var="funcionarioLazy" value="#{atribuicaoBean.funcionariosLazy}"
            paginator="true" paginatorPosition="top" rows="10"
            paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
            rowsPerPageTemplate="10,15,20" rowKey="#{funcionarioLazy}" widgetVar="wFuncionariosTable"
            selection="#{atribuicaoBean.funcionarioSelecionado}" selectionMode="single" rowExpandMode="single" >

            <p:column style="width:16px">
            <p:rowToggler />
            </p:column>

            <p:column headerText="CodFun" style="width:60px"> 
            <h:outputText value="#{funcionarioLazy.codFuncional}" />
            </p:column>

            <p:column headerText="Nome" style="width:250px" filterBy="#{funcionarioLazy.nome}" sortBy="#{funcionarioLazy.nome}">
            <h:outputText value="#{funcionarioLazy.nome}" />
            </p:column>

            <p:column headerText="Função" filterBy="#{funcionarioLazy.funcao.descricao}" sortBy="#{funcionarioLazy.funcao.descricao}" >
            <h:outputText value="#{funcionarioLazy.funcao.descricao}"/>
            </p:column>

            <p:rowExpansion>
            <div class="campo-grupo">
            <h:outputLabel value="Sede de Atribuição" style="font-weight:bold" />
            <h:outputLabel id="sedeAtribuicaoOutput" value="#{funcionarioLazy.sedeAtribuicao.nome}" size="20" />
            </div>

            <div class="campo-grupo">
            <h:outputLabel value="Sede de Frequencia" style="font-weight:bold" />
            <h:outputLabel id="sedeFrequenciaOutput" value="#{funcionarioLazy.sedeFrequencia.nome}" size="20" />
            </div>

            <br class="clear" />

            <div class="campo-simples">
            <h:outputLabel value="Sede(s) de Exercício" style="font-weight:bold" />
            <p:dataList var="sedeEx" value="#{funcionarioLazy.sedesExercicio()}" style="">
            #{sedeEx}
            </p:dataList>
            </div>

            </p:rowExpansion>

            </p:dataTable>

A implementação do LazyDataModel pede para criar um método load. Segue como está o método load.

    @Override
    public List<Funcionario> load(int startingAt, int maxPerPage, String sortField, SortOrder sortOrder, Map<String, Object> filters) {


        funcionarios = funcionarioDAO.buscar().comResultados(startingAt, maxPerPage).lista();
        for (Funcionario p : funcionarios) {
            Hibernate.initialize(p.getHorariosFuncionario());

        }

        setRowCount(funcionarioDAO.buscar().contar().intValue());
        setPageSize(maxPerPage);
        return funcionarios;

    }

O método load ainda precisa ser finalizado para retornar dados relevantes. No xhtml eu possuo os filtros na coluna nome e função. Quando entro com algum dado nessas colunas, recebo esses dados no método load pelo parâmetro Map filters.

O que eu gostaria de fazer é filtrar também os dados dentro do expandionRow (Sede Atribuição, Sede Frequência e Sede Exercício).

Inicialmente pensei em colocar um SelectOneMenu externamente a tabela e de alguma forma, ao selecionar o dado no selectOneMenu, adicionar/manipular esse parâmetro Map filter que será passado ao método load quando o filtro é disparado.

Tentei procurar alguma forma de fazer isso via WidgetVar da tabela, mas sem sucesso.

Existe algum modo de fazer o que estou pretendendo? Notando que preciso manter esses dados no ExpansionRow para que a tela não fique muito carregada.

Obrigado...

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags primefaces lazy ou faça a sua própria pergunta.