如何在f:ajax之后调用过滤器

时间:2011-07-27 11:54:12

标签: ajax jsf-2 primefaces

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

这是我的代码snipet:

<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>      

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

感谢您给我的任何帮助。 平

1 个答案:

答案 0 :(得分:2)

我不知道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();
        }
    }