【问题标题】:Datatable sums 0 on SummaryRowSummaryRow 上的数据表总和为 0
【发布时间】:2020-12-11 21:08:38
【问题描述】:

我需要在两个日期之间每天每小时获得一组交易的总数,但只能在最后一个日期获得结果。我正在使用带有 Primefaces 8.0 的 Java 8。这是我的代码:

<p:dataTable id="dtLlamadas1" value="#{llamadaBean.lista1}" var="lista1"         sortBy="#{lista1.fecha}">

    (other primefaces tags)

    <p:summaryRow>
        <p:column colspan="2" style="text-align:right">
            <h:outputText value="Total:" />
        </p:column>
        <p:column>
            <h:outputText value="#{lista1.totalTransacciones}">                                        
            </h:outputText>
        </p:column>
    </p:summaryRow>
</p:dataTable>

lista1 是 bean 中的 Java 列表,其中包含表记录的映射(DATE、HOUR、TRANSACTIONS_PER_HOUR)。

Here is a sample of the result

如您所见,在其他日子总数为 0 但最后一个。有人可以帮助我吗?

【问题讨论】:

  • 这段代码不是Java。请编辑您的问题。
  • 您能否使用 PrimeFaces Test 创建一个可重现的小示例,以便我查看您的问题并进行调试:github.com/primefaces/primefaces-test
  • @Coti 我从来没有说过我上面的代码是Java。我说 LISTA1 在它使用的 Java Bean 中。
  • @Melloware 我不知道我是否正确使用了该存储库,但这就是我所做的。感谢回复。 github.com/davidsan1982/primefaces-test.git
  • 太棒了,这就是为什么我们有人做 MVCE。很多时候,它通过剥离所有内容来帮助清除代码中的错误。

标签: java datatable primefaces


【解决方案1】:

感谢@Melloware,我解决了我的问题。这是我在 xhmtl 页面中定义的数据表:

<p:dataTable id="Opcion1" value="#{llamadaBean.lista1}" var="lista1" rows="50"                      
                         sortBy="#{lista1.fecha}">
                <p:column headerText="FECHA">
                    <p:outputLabel value="#{lista1.fecha}"/>
                </p:column>
                <p:column headerText="HORA">
                    <p:outputLabel value="#{lista1.hora}"/>
                </p:column>
                <p:column headerText="TRANSACCIONES">
                    <p:outputLabel value="#{lista1.numTransacciones}"/>
                </p:column>
                <p:summaryRow>
                    <p:column colspan="2" style="text-align:right">
                        <h:outputText value="Total:" />
                    </p:column>
                    <p:column>
                        <h:outputText value="#{lista1.totalTransacciones}">                                        
                        </h:outputText>
                    </p:column>
                </p:summaryRow>
            </p:dataTable>

这意味着它将按日期汇总所有交易。同时我的bean定义如下:

while (rs.next()) {
                numFila++;
                
                Llamada llamadaOp1 = new Llamada();

                llamadaOp1.setFecha(rs.getString("FECHA"));
                llamadaOp1.setHora(rs.getString("HORA"));
                llamadaOp1.setNumTransacciones(rs.getInt("TRANSACCIONES"));

                cont += rs.getInt("TRANSACCIONES");

                //get the total by day

                if(numFila>=24 || rs.isLast()){
                    llamadaOp1.setTotalTransacciones(cont);
                    cont=0;
                    numFila=0;
                }

                listaOp1.add(llamadaOp1);
            }

问题出在 llamadaOp1.setTotalTransacciones(cont),因为当 HORA 仍处于 23:00 时,它比较了 numFila>=23,因此 llamadaOp1 .setTotalTransacciones(cont) 将在 00:00 时设置为 0。我是 primefaces 的新手,所以我相信这个错误就在那里。

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2018-09-15
    • 2022-07-24
    • 2016-06-18
    相关资源
    最近更新 更多