以下代码在应用过滤后未正确更新当前数据表行数。有时我必须在输入文本后在过滤器输入框中按两次回车键,以便正确更新计数。有时它只是在我输入文本并且不按回车键后才起作用。有时我也可以只输入一次回车键,计数就会正确更新。我不明白为什么我会得到这种不同的行为。也许 JSF / Primefaces 专家可以帮助我理解这一点?
<h:form id="summaryForm">
...
<p:tabView id="summaryTabView">
...
<p:tab id="allTab" title="All">
...
<script type="text/javascript">
//<![CDATA[
function updateAllRecordCount(){
var rowCount = PF('allTblWidget').paginator.cfg.rowCount;
//alert(rowCount);
var output = document.getElementById('summaryForm:summaryTabView:allTable:allCount');
if (output != null){
output.innerHTML = rowCount + " Records";
}
}
//]]>
</script>
<p:dataTable widgetVar="allTblWidget"
id="allTable"
var="pb"
value="#{statisticsBean.all}"
emptyMessage="No data available!"
rowKey="#{pb.rowId}"
scrollable="true" scrollHeight="440"
selection="#{statisticsBean.selectedBean}"
selectionMode="single"
editable="true"
editMode="cell"
paginator="true"
rows="300"
paginatorAlwaysVisible="false">
<p:ajax event="filter" oncomplete="updateAllRecordCount();"/>
<f:facet name="header">
<p:menubar styleClass="tableMenuClass">
...
<f:facet name="options">
<h:outputText id="allCount" style="font-size:14px;" value="#{statisticsBean.all.size()} Records"/>
</f:facet>
</p:menubar>
</f:facet>
...