22 octubre, 2020

Calcular automáticamente la suma total de una columna con datos numéricos en el pie de página de un DataTable (JSF)

Cuando los datos numéricos se enumeran en un <p:dataTable> (o <h:dataTable>), ¿hay alguna forma de obtener la suma total en la fila de resumen en el pie de página de la tabla sin calcularla en el Managed Bean y proporcionarla nuevamente como otra propiedad de bean?


Solución

Si su entorno es compatible con el nuevo EL 3.0 de Java EE 7 (por ejemplo, WildFly 8 ), puede utilizar el nuevo soporte para operaciones de Lambda y Stream similares a Java 8 en EL (sí, esto funciona incluso cuando se usa Java 7).

En su caso particular, puede utilizar el equivalente EL 3.0 de Java 8 (o , según el tipo de propiedad): IntStream#sum(), DoubleStream#sum().

<h:dataTable value="#{bean.items}" var="item">
       <h:column>
           #{item.number}
       </h:column>
       <f:facet name="footer">
           Total: #{bean.items.stream().map(item->item.number).sum()}
       </f:facet>
</h:dataTable>

No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!