如何在PrimeFaces DataTable中清除全局过滤器

时间:2013-02-13 21:50:02

标签: jsf primefaces

如何使用“Clear”CommandButton清除PrimeFaces DataTable中的全局过滤器?我找到了similar question on PrimeFaces forum,但看起来没有回答 - 提示可以发现那里没有帮助我。我试着按如下方式解决问题:

<p:dataTable id="myTab" widgetVar="myTabWidgetVar" var="obj"
    value="#{managedBean.objects}">
    <f:facet name="header">
        <p:outputPanel>
            <h:outputText value="Search all fields:"/>
            <p:inputText id="globalFilter" onkeyup="myTabWidgetVar.filter()"/>
        </p:outputPanel>
    </f:facet>
</p:dataTable>
<p:commandButton value="Clear" onclick="myTabWidgetVar.clearFilters();"
    update="@form"/>

它仅清除列过滤器。全局过滤器中的值仍未清除。你能帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:6)

以下是:

$("#someFormId\\:myTab\\:globalFilter").val("").keyup();//if you got `prependId="false" , than omit the `someFormId\\:` part from the selector and leave only `myTab\\:globalFilter`

这将使用空字符串填充过滤器并触发键盘事件,从而清除过滤器并清除表格的过滤器状态

如果您只想清除过滤器而不重置应用于您的桌子的过滤器,请使用

$("#someFormId\\:myTab\\:globalFilter").val("");

如果要在commandButton中使用此代码,则无需使用ajax(update...

只需像这样使用onclick

<p:commandButton value="Clear" 
onclick="$('#someFormId\\:myTab\\:globalFilter').val('').keyup(); return false;"/>

使用return false;,因此该按钮不会提交您的页面...

答案 1 :(得分:1)

Primefaces数据表具有“filteredValue”选项。我们假设您设置过滤值,如; filteredValue = “#managedBean.filteredObjects}”。

filteredObjects与datatable的值具有相同的类型,在您的情况下为“managedBean.objects”。在加载datatable之前,将filteredObjects变量设置为NULL。它会解决你的问题。

答案 2 :(得分:1)

<pdataTable  widgetVar="departments" />
<p:commandButton value="#{lang:text('Add department')}"
                 id="....."
                 actionListener="....."
                 update="@form"
                 oncomplete="PF('departments').clearFilters()"
                 styleClass="........."/>

在我的情况下适用于素面