0

我正在使用事件过滤器重新计算某些列的总数,当过滤器运行新值在 backingBean 中计算正常但未在表中更新时。这些值是 sumaTotal、sumaCUP 和 sumaCUC,并出现在每列的页脚。这是代码:

 <p:dataTable emptyMessage="No se encontraron elementos"  widgetVar="tb1"  
                         id="tablaFact" var="item" selection="#{listadoFacturasMB.selectedFactura}" selectionMode="single"  paginator="true" 
                         rows="20" rowKey="#{item.idFactura}" value="#{listadoFacturasMB.facturaUtilList}" filteredValue="#{listadoFacturasMB.filterFacturaUtilList}"> 


                <p:ajax event="rowSelect" update=":frm1:growl :frm1:panelDetallesServicio" oncomplete="servDialog.show()" listener="#{listadoFacturasMB.createPDF}"/>  
                <p:ajax event="rowUnselect"  update=":frm1:growl"/> 
                <p:ajax event="filter" listener="#{listadoFacturasMB.filterListener(filterEvent)}" update="tablaFact"/>

                <f:facet name="header">
                    <h:outputText value="Listado de facturas"/>
                    <p:commandButton id="downloadLink" value="Recargar" icon="ui-icon-refresh" oncomplete="tb1.clearFilters()" update="tablaFact" actionListener="#{listadoFacturasMB.cargarFacturas}"/>                                  
                </f:facet>

                <p:column style="width:10%"  sortBy="#{item.noFactura}" filterBy="#{item.noFactura}" filterMatchMode="contains">
                    <f:facet name="header">
                        <h:outputText value="Nro"/>
                    </f:facet>
                    <h:outputText value="#{item.noFactura}"/>
                </p:column>
                <p:column style="width:10%"  sortBy="#{item.idClientefk}" filterBy="#{item.idClientefk}" filterMatchMode="contains">
                    <f:facet name="header">
                        <h:outputText value="Cliente"/>
                    </f:facet>
                    <h:outputText value="#{item.idClientefk}"/>
                </p:column>
                <p:column style="width:10%"  sortBy="#{item.idPropietariofk.area}" filterBy="#{item.idPropietariofk.area}" filterMatchMode="contains">
                    <f:facet name="header">
                        <h:outputText value="UEB"/>
                    </f:facet>
                    <h:outputText value="#{item.idPropietariofk.area}"/>
                </p:column>           

                <p:column style="width:10%" id="cff3">
                    <f:facet name="header">
                        <h:outputText value='Importe Total'/>
                    </f:facet>
                    <h:outputText value="#{item.importeTotal}"/>
                    <f:facet name="footer">
                        <h:outputText value="#{listadoFacturasMB.sumaTotal}"/>
                    </f:facet>
                </p:column>                  
                <p:column style="width:10%" id="cdd3">
                    <f:facet name="header">
                        <h:outputText value='Importe CUP'/>
                    </f:facet>
                    <h:outputText value="#{item.importeCup}"/>
                    <f:facet name="footer">
                        <h:outputText value="#{listadoFacturasMB.sumaCUP}"/>
                    </f:facet>
                </p:column>                  
                <p:column style="width:10%" id="cjj3">
                    <f:facet name="header">
                        <h:outputText value='Importe CUC'/>
                    </f:facet>
                    <h:outputText value="#{item.importeCuc}"/>
                    <f:facet name="footer">
                        <h:outputText value="#{listadoFacturasMB.sumaCUC}"/>
                    </f:facet>
                </p:column>                      
            </p:dataTable>   

后备豆:

    public void filterListener(FilterEvent filterEvent) {
    try {
        sumaTotal = new BigDecimal(0);
        sumaCUP = new BigDecimal(0);
        sumaCUC = new BigDecimal(0);
        for (int i = 0; i < filterFacturaUtilList.size(); i++) {
            FacturaUtil facturaUtil = filterFacturaUtilList.get(i);
            this.sumaTotal = this.sumaTotal.add(facturaUtil.getImporteTotal());
            this.sumaCUP = this.sumaCUP.add(facturaUtil.getImporteCup());
            this.sumaCUC = this.sumaCUC.add(facturaUtil.getImporteCuc());
        }
        this.sumaTotal = this.sumaTotal.setScale(2, RoundingMode.HALF_UP);
        this.sumaCUP = this.sumaCUP.setScale(2, RoundingMode.HALF_UP);
        this.sumaCUC = this.sumaCUC.setScale(2, RoundingMode.HALF_UP);
    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, "Error: filterListener() " + e.getMessage());
    }
}
4

0 回答 0