4
respostas

p:selectCheckboxMenu não funciona pra filtrar

Tenho um datatable com uma coluna que preciso filtrar com o componente p:selectCheckboxMenu, porém este não funciona. Mas se eu coloco para filtrar somente com o filtro básico do datatable, que é a pesquisa por nome, ele funciona.

A parte do datatable que não funciona

<p:dataTable id="monografiasDataTable" widgetVar="monografiaTable"
                value="#{gestaoMonografiasBean.listaMonografias}" var="monografia"
                emptyMessage="Nenhuma informação a ser exibida" paginator="true"
                rows="10" paginatorPosition="bottom" selectionMode="single"
                selection="#{gestaoMonografiasBean.monografia}"
                rowKey="#{monografia.id}" filteredValue="#{gestaoMonografiasBean.listaMonografiasFiltradas}" >

<p:column filterBy="#{monografia.listaLinhaPesquisas[0].nome}" headerText="Linha de Pesquisa">
                    <f:facet name="filter" >
                        <p:selectCheckboxMenu label="Linha de Pesquisa" value="#{gestaoMonografiasBean.listaMonografiasFiltradas}"
                            onchange="PF('monografiaTable').filter()"
                            converter="omnifaces.SelectItemsConverter">
                            <f:attribute name="collectionType" value="java.util.ArrayList" />    
                            <f:selectItems
                                value="#{gestaoMonografiasBean.listaLinhaPesquisas}"
                                var="listaLinhaPesquisas"
                                itemLabel="#{listaLinhaPesquisas.nome}"
                                itemValue="#{listaLinhaPesquisas}" />
                        </p:selectCheckboxMenu>
                    </f:facet>
                    <h:outputText value="#{monografia.listaLinhaPesquisas[0].nome}" />
                </p:column>

O bean

    @PostConstruct
    private void iniciar() {
        monografia = new Monografia();
        this.monografia.setLinhaPesquisa(new LinhaPesquisa());

        aluno = new Aluno();
        this.aluno.setPessoa(new Pessoa());

        professor = new Professor();
        this.professor.setPessoa(new Pessoa());

        listaLinhaPesquisas = linhaPesquisas.todas();

        listaMonografias = monografias.todas();



    }

    public void prepararNovaMonografia() {
        monografia = new Monografia();
        this.monografia.setLinhaPesquisa(new LinhaPesquisa());
    }

    public void prepararEdicao() {
        professorConverter = new ProfessorConverter(Arrays.asList(monografia.getProfessor()));
        alunoConverter = new AlunoConverter(Arrays.asList(monografia.getAluno()));
        listaMonografiasFiltradas = monografias.todas();
    }

    public void salvar() {
        try {
            cadastroMonografiaService.salvar(monografia);

            atualizarRegistros();

            messages.info("Monografia salva com sucesso!");

            RequestContext.getCurrentInstance().update(Arrays.asList("frm:monografiasDataTable", "frm:messages"));

        } catch (Exception erro) {
            erro.printStackTrace();
        }
    }

    public void pesquisar() {
        listaMonografias = monografias.pesquisar(termoPesquisa);

        if (listaMonografias.isEmpty()) {
            messages.info("Sua consulta não retornou registros.");
        }
    }

    public void todasMonografias() {
        listaMonografias = monografias.todas();
    }

    public List<Professor> completarProfessor(String termo) {
        List<Professor> listaProfessores = professores.pesquisar(termo);

        professorConverter = new ProfessorConverter(listaProfessores);

        return listaProfessores;
    }

    public List<Aluno> completarAluno(String termo) {
        List<Aluno> listaAlunos = alunos.pesquisar(termo);

        alunoConverter = new AlunoConverter(listaAlunos);

        return listaAlunos;
    }

    public List<LinhaPesquisa> getSelecionarLinhaPesquisa(String termo) {
        List<LinhaPesquisa> listaLinhaPesquisas = linhaPesquisas.pesquisar(termo);
        linhaPesquisaConverter = new LinhaPesquisaConverter(listaLinhaPesquisas);
        return listaLinhaPesquisas;
    }

    private void atualizarRegistros() {
        if (jaHouvePesquisa()) {
            pesquisar();
        } else {
            todasMonografias();
        }
    }

    private boolean jaHouvePesquisa() {
        return termoPesquisa != null && !"".equals(termoPesquisa);
    }

    public List<Monografia> getListaMonografias() {
        return listaMonografias;
    }

    public void setListaMonografias(List<Monografia> listaMonografias) {
        this.listaMonografias = listaMonografias;
    }

    public List<Monografia> getListaMonografiasFiltrada
4 respostas

Alguém poderia ajudar?

Fala ai Daniel, de boa ?

Você chegou a colocar o <h:form>?

Sim coloquei. Ele abre no início do arquivo e fecha no fim

<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    template="/WEB-INF/template/Layout.xhtml">

    <ui:define name="titulo">
        <title>Gestão Monografias</title>
    </ui:define>
    <ui:define name="conteudo">

        <f:metadata>
            <f:viewAction action="#{gestaoMonografiasBean.todasMonografias}" />
        </f:metadata>

        <h:form id="frm">
            <p:messages id="messages" />

            <p:spacer height="20px" />
                </h:panelGrid>
            </p:dialog>
        </h:form>
    </ui:define>

</ui:composition>

Fala ai Mateus, tem ideia oque seja? Eu pesquisando, vi que pode ser porque o Ajax faz um pré processamento e isto pode estar causando esse conflito. Não tenho ideia de como resolver

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software