2

在我的视图层中,我使用具有 9 列的 Primefaces 数据表,其中最后一个具有浮点值(列名 = '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>
4

1 回答 1

2

只是为了不让这个问题无人回答,这个问题的解决方案(见下文)可以在我的另一篇文章中找到: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)"

于 2014-10-16T14:40:46.630 回答