【问题标题】:How to invoke filter after f:ajax如何在 f:ajax 之后调用过滤器
【发布时间】:2011-07-27 11:54:12
【问题描述】:

在我的 p:datatable 中有一个名为 Resolution 的列,由一个复选框和文本组成。如果选中该框,则文本已解析,如果未选中该框,则文本未解析。我还为此列定义了一个过滤器框,因此只显示已解决或未解决的条目。 如果我在 Resolved 上进行过滤,然后取消选中该框,该条目现在是 Unresolved,但它仍然显示。它不应该,因为它不再满足过滤器。我的问题是如何强制 filter() 在最后一次 f:ajax 渲染之后执行?

这是我的代码片段:

<p:dataTable id="measurementHistoryTableId"
  value="#{measurements.measurementHistoryList}" 
  var="meas3"
  dynamic="true">
  <p:column id="resolutionColumn"
    filterBy="#{meas3.resolution}"
    filterOptions="#{measurements.measurementHistoryOptions}" 
    sortBy="#{meas3.resolution}"  >
    <f:facet name="header">
      <h:outputText value="#{msgs.MeasurementResolution}" />
    </f:facet>
    <h:selectBooleanCheckbox value="#{meas3.resolved}" >
      <f:ajax event="click" execute="@all" render="resolutionId @this" />
    </h:selectBooleanCheckbox>
    <h:outputText id="resolutionId" value="#{meas3.resolution}" />
  </p:column>                   
</p:dataTable>      

我尝试了 render=@all,但这没有帮助。 render=@form 给了我未定义的 jQuery.datepicker。我尝试将 'onclick=widget_measurementHistoryTableId.filter()' 添加到 'h:selectBooleanCheckbox' ,但它会导致过滤器在 'f:ajax' 执行之前触发。

感谢您能给我的任何帮助。 宾州

【问题讨论】:

    标签: ajax jsf-2 primefaces


    【解决方案1】:

    我不知道 primefaces 过滤是如何工作的,但是,如果 onclick=widget_measurementHistoryTableId.filter() 有效并且您只是希望在 ajax 事件之后触发它,您可以这样做:

    <f:ajax event="click" execute="@all" render="resolutionId @this" 
        onevent="reapplyFilter"/>
    

    然后定义reapplyFilter js函数:

    function reapplyFilter(e) {
            if (e.status == 'success') {
                widget_measurementHistoryTableId.filter();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 2014-09-14
      • 2012-07-06
      • 1970-01-01
      • 2019-05-09
      • 2015-11-04
      • 2018-04-08
      • 1970-01-01
      • 2018-11-07
      相关资源
      最近更新 更多