在我的视图层中,我使用了包含9列的Primefaces Datatable,最后一列具有浮点值(列名='Valor')。
有一个名为'prefDep'的整数列,它的值有一个过滤器(顺便说一下,foreignKey值):
<!-- column name omitted -->
<p:column sortBy="#{item.prefDep}" filterBy="#{item.prefDep}">
<h:outputText value="#{item.prefDep}"/>
</p:column>
Datatable的最后一行有一个固定 GrandTotal,它是所提到的'Valor'列的总和:
<p:columnGroup type="footer">
<p:row>
<p:column colspan="8" footerText="Grand Total:" />
<p:column footerText="#{upbController.totalLosses}" />
</p:row>
</p:columnGroup>
控制器类中获取总和的方法:
public int getTotalLosses() {
int total = 0;
for(Upb id : getItems()) {
total += id.getValor();
}
return total;
}
我想要的是:当我过滤数据表时,我想仅为过滤的值部分显示相应的GrandTotal,而不是“固定的”总和。
我该怎么做?
提前致谢。
-
节后:
在我的AbstractController中,我有:
private List<T> filteredUpb;
//...
public List<T> getFilteredUpb() {
if (filteredUpb == null) {
filteredUpb = this.ejbFacade.findAll();
}
return filteredUpb;
}
在我的UpbController(managedBean)中:
private List<Upb> filteredUpb = null;
//...
public int getPerdasTotal() {
int total = 0;
for (Upb id : getFilteredUpb()) {
total += id.getVlOco();
}
return total;
}
在jsf:
<p:column>
<f:facet name="footer">
<h:outputText value="#{upbController.perdasTotal}" />
</f:facet>
</p:column>
答案 0 :(得分:1)
为了不让这个问题得不到回答,这个问题的解决方案(见下文)可以在我的另一篇文章中找到:Dynamic Calculation Using Filter in Datatable
我认为您可以在PF数据表过滤和/或分页上定义AJAX调用。
<p:dataTable value="#{myBackingBean.values}" var="row" filteredValue="#{myBackingBean.filteredValues}" >
<p:ajax event="filter" listener="#{myBackingBean.updateSum}" update="componentToUpdate" />
//...
</p:dataTable>
在您的updateSum()方法中,您可以浏览filteredValues集合来开展业务。
您可能难以定位数据表中包含的更新组件,但可以通过向代码中添加styleClass="footerToUpdate"
之类的内容并在更新中使用update="@(.footerToUpdate)"