【问题标题】:Primefaces Datatable dynamic calculationPrimefaces Datatable 动态计算
【发布时间】:2013-11-05 16:34:03
【问题描述】:

在我的视图层中,我使用了一个包含 9 列的 Primefaces 数据表,其中最后一个具有浮点值(列名 = 'Valor')。

有一个名为“prefDep”的整数列,它的值有一个过滤器(顺便说一下,外键值):

<!-- column name omitted -->   
<p:column sortBy="#{item.prefDep}" filterBy="#{item.prefDep}">
  <h:outputText value="#{item.prefDep}"/>
</p:column>

Datatable 的最后一行有一个fixed 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>

【问题讨论】:

  • stackoverflow.com/users/1659451/omer-faruk-almali ,我们所有的讨论和您的解决方案都在哪里发布?我正在研究您的解决方案,但现在它消失了。你把所有东西都删了吗?我想知道为什么,如果是这样的话……正因为如此,我现在有了一个风滚草徽章

标签: primefaces datatable filtering


【解决方案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)" 来解决

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多