在我的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'执行之前触发。
感谢您给我的任何帮助。 平
答案 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();
}
}