我想在过滤和/或分页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