3
respostas

Filtro comboBox Gênero não funciona com uso de lazy

Quando utiliza-se lazy, para tratar a paginação sob demanda, todos filtros das colunas funcionam, no entanto o de categoria (combobox - genero) não. Pesquisei e procurei alguma forma e não consegui faze-lo funcionar.

Código do trecho da página:

<h:form id="formTabelaLivros">
            <p:dataTable value="#{livroBean.livroDataModel}" widgetVar="tabelaLivros" var="livro" id="tabelaLivros" paginator="true" rows="5" lazy="true">
                <f:facet name="header">Livros</f:facet>
                <!-- este não funciona -->
                <p:column headerText="Gênero" sortBy="#{livro.genero}" filterBy="#{livro.genero}" filterMatchMode="startsWith">
                <f:facet name="filter">
                    <p:selectOneMenu onchange="PF('tabelaLivros').filter()">
                        <f:selectItem itemLabel="Selecione..." itemValue="#{null}" noSelectionOption="true" />
                        <f:selectItems value="#{livroBean.generos}" />
                     </p:selectOneMenu>
                    </f:facet>        
                    <h:outputText value="#{livro.genero}" />
                </p:column>

                <p:column headerText="Titulo" sortBy="#{livro.titulo}" filterBy="#{livro.titulo}" filterMatchMode="startsWith">
                    <h:outputText value="#{livro.titulo}" />
                </p:column>

                <p:column headerText="ISBN" sortBy="#{livro.isbn}" filterBy="#{livro.isbn}" filterMatchMode="contains">                    
                    <h:outputText value="#{livro.isbn}" />
                </p:column>

                <p:column headerText="Preço" sortBy="#{livro.preco}" filterBy="#{livro.preco}" filterFunction="#{livroBean.precoEhMenor}">                    
                    <h:outputText value="#{livro.preco}">
                        <f:convertNumber type="currency" pattern="R$ #0.00"
                            currencySymbol="R$" locale="pt_BR" />
                    </h:outputText>
                </p:column>

                <p:column headerText="Data" sortBy="#{livro.dataLancamento.time}" filterBy="#{livro.isbn}" filterMatchMode="contains">                    
                    <h:outputText value="#{livro.dataLancamento.time}">
                        <f:convertDateTime pattern="dd/MM/yyyy HH:mm"
                            timeZone="America/Sao_Paulo" />
                    </h:outputText>
                </p:column>

                <p:column headerText="Remover">                    
                    <h:commandLink value="Remover" action="#{livroBean.remover(livro)}" />
                </p:column>

                <p:column headerText="Alterar">
                    <h:commandLink value="Alterar"
                        action="#{livroBean.carregar(livro)}" />
                </p:column>
            </p:dataTable>
        </h:form>
3 respostas

Obs: a paginação funciona normalmente.

E o que acontece? solta um erro? nesse selectItem não faltou vc especificar quem vai ser o value e quem vai ser a label do select não?

Não solta nenhum erro, apenas não fltra, se eu tiro o lazy=true, e falo para usar a lista normal (não usar o value="#{livroBean.livroDataModel}" e sim value="#{livroBean.livros}", funciona, será alguma falha no componente primeFaces?