在p:dataTable上使用自定义全局过滤器

时间:2019-02-05 21:31:48

标签: jsf primefaces jsf-2 pf-datatable

我正在尝试使用PrimeFaces中的全局过滤器来实现逗号分隔的关键字搜索。

如果用户在全局搜索中输入word1,word2,则应返回所有具有word1word2的行。到目前为止,我无法在PrimeFaces中找到用于全局搜索的预定义多字搜索功能。全局搜索仅适用于单个关键字。例如:仅当用户键入word1word2时,搜索才会返回结果。

好像PrimeFaces使用客户端API filter()进行全局搜索。有没有一种方法可以使用多个关键字进行搜索?

<p:dataTable id="dwg" widgetVar="tblDwgDtl" var="dwgDtl" 
 value="#{dwgCtrlr.dwgs} sortMode="multiple" scrollable="true" 
 styleClass="bsa-drawing" rows="25" resizableColumns="true">
    <f:facet name="header">
        <p:panelGrid styleClass="ui-panelgrid-blank">
                <p:row>
                    <p:column colspan="6">
                        <p:inputText id="globalFilter" 
                        onkeyup="PF('tblDwgDtl').filter()" 
                        placeholder="#{msg['searchAllFields.text']}" />
                    </p:column>
                </p:row>
        </p:panelGrid>
   </f:facet>

1 个答案:

答案 0 :(得分:3)

PrimeFaces 7.1及更高版本

在PrimeFaces 7.1中,您可以使用globalFilterFunction的{​​{1}}属性来实现自定义全局过滤器。参见https://primefaces.github.io/primefaces/7_1/#/components/datatable?id=filtering

PrimeFaces 7.1之前的版本

您可以做的是replace the data table renderer with a custom one。然后,in there,用自定义版本替换p:dataTable。因此,您需要扩展FilterFeaturetake care of the multiple keywords there