【问题标题】:How to clear global filter in PrimeFaces DataTable如何清除 PrimeFaces DataTable 中的全局过滤器
【发布时间】:2013-01-29 14:32:06
【问题描述】:

如何使用“清除”命令按钮清除 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"/>

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

【问题讨论】:

  • 既然globalFilter 最终会是&lt;input type="text"&gt;,那么只需使用原生JavaScript 或使用jQuery(更适合您的那个)来清除它的价值。

标签: jsf primefaces


【解决方案1】:

方法如下:

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

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

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

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

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

像这样使用onclick

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

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

【讨论】:

  • 当我将“myTab”和封闭的“someFormId”放在复合组件内时,它停止工作。你能再帮我一次吗?
  • @Serg,试试$('input[id$="someFormId\\:myTab\\:globalFilter"]').val('').keyup();$('input[id$="someFormId:myTab:globalFilter"]').val('').keyup(); 或最坏的情况,试试$('input[id$="myGlobalFilterUniqueId"]').val('').keyup();
  • 感谢您的帮助。不幸的是,它在我的情况下不起作用。我已经回到用退格键清除输入。
  • 如果我使用该代码,我会丢失当前选择的数据,因为我使用了过滤器 D:
【解决方案2】:

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

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

【讨论】:

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

    它适用于我的主要面孔

    【讨论】:

    • 他想要“全局”而不是“特定”表
    猜你喜欢
    • 2016-08-19
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多