2013-05-29 68 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

您每次修改列表時都可以調用該方法計算總和:)。 –