2013-05-29 72 views
1

我通过ListDataModel接收JSF页面中的数据。
我需要总和列的所有值。
沿用了JSF代码:PrimeFaces中的Sum Column Datatable

<p:dataTable id="table" value="#{ProductBean.listProduct}" var="item" style="font-size:"12px" > 
<p:column > 
    <f:facet name="header"> 
     <h:outputText value="NAME" /> 
    </f:facet > 
    <h:outputText value="#{item[0].name}" /> 
</p:column > 
<p:column > 
    <f:facet name="header"> 
     <h:outputText value="VALUE BUY" /> 
    </f:facet > 
    <h:outputText value="#{item[1].valuebuy}" /> 
</p:column > 
<p:column > 
    <f:facet name="header"> 
     <h:outputText value="VALUE SELL" /> 
    </f:facet > 
    <h:outputText value="#{item[2].valuesell}" /> 
</p:column > 
<p:columnGroup type="footer"> 
    <p:row>           
     <p:column footerText="Total" /> 
     <p:column footerText="TotalBuy" /> <<<<--------- Sum All Values of item[1].valuebuy and show here 
     <p:column footerText="TotalSell" /> <<<<--------- Sum All Values of item[2].valuesell and show here     
    </p:row> 
</p:columnGroup> 
</p:dataTable > 

回答

5

只需添加一个<f:facet name="footer"><p:column>将包含必要的信息,并调用Bean的方法来得到它。

基本例如:

的视图:

<p:dataTable id="table" value="#{productBean.products}" var="product"> 
    <p:column> 
     <f:facet name="header"> 
      <h:outputText value="NAME" /> 
     </f:facet> 
     <h:outputText value="#{product.name}" /> 
     <f:facet name="footer"> 
      <h:outputText value="Total" /> 
     </f:facet> 
    </p:column> 
    <p:column> 
     <f:facet name="header"> 
      <h:outputText value="VALUE BUY" /> 
     </f:facet> 
     <h:outputText value="#{product.valueBuy}" /> 
     <f:facet name="footer"> 
      <h:outputText value="#{productBean.valueBuyTotal}" /> 
     </f:facet> 
    </p:column> 
    <p:column> 
     <f:facet name="header"> 
      <h:outputText value="VALUE SELL" /> 
     </f:facet> 
     <h:outputText value="#{product.valueSell}" /> 
     <f:facet name="footer"> 
      <h:outputText value="#{productBean.valueSellTotal}" /> 
     </f:facet> 
    </p:column> 
</p:dataTable> 

的豆:

public class ProductBean { 

    private List<Product> products; 

    @PostConstruct 
    public void init() { 
     //load products in some way, like products = service.list(); 
    } 

    public int getValueBuyTotal() { 
     int quantity = 0; 
     for(Product p : products) { 
      quantity += p.getValueBuy(); 
     } 
     return quantity; 
    } 

    public int getValueSellTotal() { 
     int quantity = 0; 
     for(Product p : products) { 
      quantity += p.getValueSell(); 
     } 
     return quantity; 
    } 

} 

模型:

public class Product { 

    String name; 
    int valueBuy; 
    int valueSell; 

} 
+0

而不是使用假的getter方法,最好将总和保存在托管bean的字段中。 –

+0

@LuiggiMendoza正确,但是如果OP'修改'产品的值,他需要在setter方法中更新适当的总和,以便它始终保持一致。由于它在表面层面不可见,这种方法基本上是“动态安全”的。 – skuntsel

+0

您每次修改列表时都可以调用该方法计算总和:)。 –