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

Ser*_*erg 2 jsf primefaces

如何使用"Clear"CommandButton清除PrimeFaces DataTable中的全局过滤器?我在PrimeFaces论坛上发现了类似的问题,但看起来没有回答 - 提示可以发现那里没有帮助我.我试着按如下方式解决问题:

<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"/>
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*iel 6

方法如下:

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

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

如果您只是想清除过滤器而不重置应用于您的表使用的过滤器

$("#someFormId\\:myTab\\:globalFilter").val("");
Run Code Online (Sandbox Code Playgroud)

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

只要使用onclick这样的

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

使用return false;这样按钮不会提交您的页面...