Автоматическое вычисление общей суммы столбца с числовыми данными в datatable footer

Когда числовые данные перечислены в <p:dataTable> (или <h:dataTable>), есть ли способ получить общую сумму в итоговой строке в нижнем колонтитуле таблицы, не вычисляя ее в резервной копии bean и предоставляя ее как снова другое свойство bean?

Ответы

Ответ 1

Если ваша среда поддерживает Java EE 7 новый EL 3.0 (например, WildFly 8), то вы можете использовать новую поддержку Java 8- например Операции Stream и Lambda в EL (да, это работает даже при использовании Java 7).

В вашем конкретном случае вы можете использовать эквивалент EL 3.0 Java 8 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>