我想在過濾和/或分頁Primefaces數據表時動態更新dataSet值的總和。使用數據表中的過濾器進行動態計算
下面的jQuery的例子顯示正是的行爲我想:http://datatables.net/examples/advanced_init/footer_callback.html
見下面我主要的代碼針對此問題:
JSF的
<p:columnGroup type="footer">
<p:row>
<p:column colspan="6" footerText="Grand Total:" style="text-align:right"/>
<p:column colspan="7">
<f:facet name="footer">
<h:outputText value="#{purchaseOrderController.soma}">
<f:convertNumber pattern="###,###" locale="pl_PL"/>
</h:outputText>
</f:facet>
</p:column>
</p:row>
</p:columnGroup>
的方法SOMA:
private float soma;
public float getSoma() {
for (PurchaseOrder p : getItems()) {
soma += p.getShippingCost().floatValue();
}
return soma;
}
有人可以幫我嗎?
在此先感謝。
更新代碼
豆子:
@Named(value = "purchaseOrderController")
@ViewScoped
public class PurchaseOrderController extends AbstractController<PurchaseOrder> implements Serializable {
private float soma = 0;
private float somaFiltered = 0;
private List<PurchaseOrder> filteredPurchaseOrder;
public List<PurchaseOrder> getFilteredPurchaseOrder() {
return filteredPurchaseOrder;
}
public void setFilteredPurchaseOrder(List<PurchaseOrder> filteredPurchaseOrder) {
this.filteredPurchaseOrder = filteredPurchaseOrder;
}
//return the sum for the FILTERED list - using this method, get a NullPointerException (the filtered list is null)
public float getSomaFiltered() {
for (PurchaseOrder p : filteredPurchaseOrder) {
somaFiltered += p.getQuantity() * p.getShippingCost().floatValue();
}
return somaFiltered;
}
//return the sum for the ENTIRE list - using this method it's ok
public float getSoma() {
for (PurchaseOrder p : getItems()) {
soma += p.getQuantity() * p.getShippingCost().floatValue();
}
return soma;
}
@Inject
private PurchaseOrderFacade ejbFacade;
public PurchaseOrderController() {
super(PurchaseOrder.class);
}
}
了JSF(某些列中省略):
<h:form id="PurchaseOrderListForm">
<p:panel header="#{appBundle.ListPurchaseOrderTitle}">
<p:dataTable id="datalist" var="item" value="#{purchaseOrderController.items}"
filteredValue="#{purchaseOrderController.filteredPurchaseOrder}"
selectionMode="single" selection="#{purchaseOrderController.selected}"
rowKey="#{item.orderNum}"
paginator="true"
rows="10"
rowsPerPageTemplate="10,20,30"
>
<p:ajax event="rowSelect" update="createButton viewButton editButton deleteButton"/>
<p:ajax event="rowUnselect" update="createButton viewButton editButton deleteButton"/>
<p:ajax event="filter" listener="#{purchaseOrderController.filteredPurchaseOrder}" update="partialSoma" />
<p:column sortBy="#{item.quantity}" filterBy="#{item.quantity}">
<f:facet name="header">
<h:outputText value="#{appBundle.ListPurchaseOrderTitle_quantity}"/>
</f:facet>
<h:outputText value="#{item.quantity}"/>
</p:column>
<p:column sortBy="#{item.shippingCost}" filterBy="#{item.shippingCost}">
<f:facet name="header">
<h:outputText value="#{appBundle.ListPurchaseOrderTitle_shippingCost}"/>
</f:facet>
<h:outputText value="#{item.shippingCost}"/>
</p:column>
<p:columnGroup type="footer">
<p:row>
<p:column colspan="6" footerText="Grand Total:" style="text-align:right"/>
<p:column colspan="7">
<f:facet name="footer">
<h:outputText id="partialSoma" value="#{purchaseOrderController.somaFiltered}">
</h:outputText>
</f:facet>
</p:column>
</p:row>
</p:columnGroup>
</p:dataTable>
</p:panel>
</h:form>
SébastienVanmechelen,我已經使用Netbeans 7.4導入項目並使用Glassfish 4執行就好!天啊!大約4個月前我正在尋找這個解決方案,你解決了這個問題!我真的非常感激並且很高興!非常感謝你,上帝保佑你! – jMarcel