当前位置: 首页 > 知识库问答 >
问题:

Primefaces Datatable当前行计数在筛选后未在页面中正确更新

易和怡
2023-03-14

以下代码在应用筛选后不会正确更新当前datatable行计数。有时我必须在输入文本后按两次过滤器输入框中的enter键,这样计数才会正确更新。而且有时它只是在我键入文本而不是按enter键之后才起作用。有时我也可以只键入一次enter键,计数就会正确更新。我不明白为什么我会有这种不同的行为。也许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>
                   ...

共有1个答案

孙才捷
2023-03-14

下面列出的变通方法允许我在过滤后显示正确的记录计数--我基本上使用了下面datatable元素中列出的最后3个分页属性,在过滤后显示正确的记录计数,并取出了前面的filter事件、JavaScript函数和outputText字段。这个答案并没有真正回答最初的问题(我认为PF5.1中可能存在一个bug),但至少它提供了一个解决方案

<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="true"
                         paginatorTemplate="{CurrentPageReport}"
                         currentPageReportTemplate="{totalRecords} Records">
 类似资料:
  • 我有一个Primefaces datatable位于 现在,当我向一列添加筛选器时,datatable在应用筛选器时不再正确显示相关信息。 调试时,我可以看到被调用,并且它似乎可以正常工作(添加元素),但是当我在浏览器中检查html时,只有输入和纯文本。 以下是筛选前datatable的呈现: 下面是选择筛选器值后datatable的呈现: 这里有一些代码可以再现这个问题: 我使用的是JSF2.2

  • 安全性:编码器:AppBundle\Entity\Usuario:算法:bcrypt#https://symfony.com/doc/current/security.html#b-配置如何加载用户提供程序:db\U提供程序:实体:类:AppBundle:Usuario

  • 我希望能够获得我已经提交给执行服务(特别是线程池执行器)的Callable(因此它们不能通过getQueue())。 我试图创建一个子类来覆盖beForeExecute之前的

  • 我在一个网站上做一些代码清理/验证,遇到了一个问题。该站点有一个主菜单(菜单栏),其中应显示当前页面。 菜单结构如下所示: 根据WAI-ARIA规范,角色menuItem上不允许状态aria选择:http://www.w3.org/TR/wai-aria/states_and_properties#aria-selected.我也找不到任何似乎将menuproject标记为选择的menuproje

  • 这一组数据在进行groupby前已经完成筛选,但进行groupby聚合后的结果显示是利用未筛选的数据进行的聚合,就像下面的结果,在groupby前已经完成点击量非0过滤,但最后仍存在含0的资源,询问chatGPT给的方案是可能用索引前的数据进行的聚合,重置索引后仍无法解决,请教大牛是否遇到过类似的问题,虽然可以在聚合后重新进行filter过滤,但这个问题搞得很焦灼 代码源文本

  • 我有一个颜色编辑JDialog,用户可以在其中添加/删除/编辑颜色。颜色显示在从DB填充的Jtable中。UI包含一个txtField,由于TableRowSorter,它允许过滤。Jtable使用默认的TableModel,在用户选择删除一行之后,例如我做了一个model.remove行(tableau.getSelectedRow())来刷新模型。 我的问题是:当用户不使用分类器并单击dele