primefaces数据表过滤器

时间:2018-04-18 17:02:35

标签: primefaces filter datatable pf-datatable

我有一个数据表,输入开关组件作为其中一列。我正在使用全局过滤器进行搜索,过滤器工作正常,但如果后备bean中没有匹配数据,则表变为空,如果从过滤器输入文本中清除搜索文本,则所有输入开关将处于禁用状态即使后端数据处于活动状态,数据表的第一页也是如此。 我试图将过滤器用于输入开关所在的列,但没有运气。 任何帮助将不胜感激。

这是我的样本xhtml

<p:dataTable id="dataTbl" var="_list"
                    value="#{Bean.List}" rows="10"
                    widgetVar="DataWidget" paginator="true"
                    rowKey="#{_list.lookupId}" paginatorPosition="bottom"
                    pageLinks="1" selection="#{Bean.Data}">
        <f:facet name="header">
                        <p:outputPanel style="height:30px;">
                            <h:outputText value="Unit Data"  />
                            <p:inputText id="globalFilter"
                                onkeyup="PF('DataWidget').filter()"
                                styleClass="placeHolder" placeholder="Enter 
                                keyword" />
                            <h:outputText value="Search:"/>
                        </p:outputPanel>
        </f:facet>

                    <p:ajax event="rowSelectRadio"
                        update="DataTbl, DataForm:growl
                        listener="#{DataManager.enable}" />

                    <p:column headerText=" " 
                        selectionMode="single">
                    </p:column>

                    <p:column headerText="Unit "
                        sortBy="#{_list.Type}"
                        filterBy="#{_list.Type}"
                        filterStyle="display:none;">
                        <h:outputText value="#{_list.Type}" />
                    </p:column>

                    <p:column headerText="Code"
                        sortBy="#{_list.Code}"
                        filterBy="#{_list.Code}"
                        filterStyle="display:none;">
                        <h:outputText value="#{_list.code}" />
                    </p:column>

    <p:column headerText="State" 
            <p:inputSwitch value="#{_list.active}" rendered="#{not _lookup.activeFlag}" onLabel="on" offLabel="off">
       <p:ajax listener="#{DataManager.enable(_list.Id)}" update="lookupDataTbl"/>
            </p:inputSwitch>
        <p:inputSwitch value="#{_list.active}" rendered="#{not _list.active}" onLabel="on" offLabel="off">
       <p:ajax listener="#{DataManager.disable(_list.Id)}" update="lookupDataTbl"/>
        </p:inputSwitch>

            </p:column>

</p:dataTable>

1 个答案:

答案 0 :(得分:0)

最后我发现了一个解决方法,我使用了数据表的filteredValue属性并为其分配了一个临时列表。此临时列表的值与数据表的value属性列表相同。所以过滤器将使用此列表。