#datatable #primefaces
Вопрос:
Таблица Primefaces, которая будет отфильтрована по различным атрибутам столбцов, должна содержать сводную строку, значение которой будет обновляться по мере изменения пользователем значений в фильтрах. Есть ли какой-нибудь способ сделать это?
Ответ №1:
Создайте нижний колонтитул группы столбцов в файле payments.xhtml:
<p:dataTable var="payments" value="#{testBean.payments}" filteredValue="#{testBean.filteredPayments}">
<p:column headerText="Payment status:" filterBy="#{payment.status}">
<h:outputText value="#{payment.status}"/>
</p:column>
<p:columnGroup type="footer">
<p:row>
<p:column colspan="6" headerText="Total: "/>
<p:column colspan="2" headerText="#{testBean.totalPaymentsSum}"/>
</p:row>
</p:columnGroup>
</p:dataTable/>
В TestBean.java добавьте метод в качестве средства получения для вычисления сводной строки:
List<Payment> payments;
List<Payment> filteredPayments;
public String getTotalPaymentsSum() {
int total = 0;
for(Payment payment : filteredPayments) {
total = payment.getAmount();
}
return new DecimalFormat("###,###.###").format(total);
}
Для получения дополнительной информации о фильтре см. витрину фильтра с данными.
Если у вас много данных и вы используете ленивую загрузку с возможностью обработки данных, вы можете рассчитать итоговую строку в методе load() или filter ().