[英]How to Refresh Datatable Dynamic Columns After Pagination
我使用的是primefaces 3.1,并且有一个数据表来显示分页数据,其数据列是基于页面数据构建的,并通过<p:columns/>
标记进行呈现。 使用这种方法,同一数据表的不同页可以具有不同的列。 我坚信默认情况下它将在分页时重新渲染列,但事实并非如此。 我已经尝试了<p:ajax event="page" update="myTable"/>
和<p:ajax event="page" update="myTableContainer"/>
碰碰运气。
触发分页时,是否有一种方法可以重新呈现整个数据表,因此不仅可以正确显示内容,而且可以正确显示列标题?
编辑:这是您所要求的一些代码示例。
我已经实现了自己的LazyDataModel实现,并对其进行了扩展,使其覆盖了load方法的实现:
@Override
public List<StockItem> load(int i, int i1, String string, SortOrder sortOrder, Map<String, String> map) {
List<StockItem> stockItems = super.load(i, i1, string, sortOrder, map);
inventoryMovements = service.listInventoryMovements(stockItems, fromDate, toDate);
stockOperations = new HashSet<StockOperation>();
quantityTypes = new HashSet<QuantityType>();
for (Map.Entry<StockItem, ItemMovements> entry : inventoryMovements.entrySet()) {
quantityTypes.addAll(entry.getValue().getStartingQuantities().keySet());
quantityTypes.addAll(entry.getValue().getEndingQuantities().keySet());
stockOperations.addAll(entry.getValue().getOperationsApplied().keySet());
}
return stockItems;
}
如您在方法中所见,我在每次页面加载时都同时填充了stockOperations
和quantityTypes
。 这两个对应于我的实际页面列。 (这些是我的LazyDataModel实现中的属性以及它们对应的getter)
<p:dataTable id="movementsTable" var="item"
value="#{inventoryMovementsBean.view}"
rowIndexVar="rowIndex"
paginator="true"
rows="25">
<p:column headerText="Item">
<h:outputText value="#{item.label}" />
</p:column>
<p:columns value="#{inventoryMovementsBean.view.quantityTypes}" var="quantityType" columnIndexVar="quantityTypeIndex">
<f:facet name="header">
#{quantityType.description}
</f:facet>
<h:outputText value="#{inventoryMovementsBean.view.getStartingQuantity(item, quantityType)} => #{inventoryMovementsBean.view.getEndingQuantity(item, quantityType)}" />
</p:columns>
<p:columns value="#{inventoryMovementsBean.view.stockOperations}" var="stockOperation" columnIndexVar="stockOperationIndex">
<f:facet name="header">
#{stockOperation.name}
</f:facet>
<h:outputText value="#{inventoryMovementsBean.view.getOperationValue(item, stockOperation)}" />
</p:columns>
</p:dataTable>
ventoryMovementsBean.view是我的LazyDataModel实例,方法getOperationValue(item,stockOperation),getStartingQuantity(item,quantityType)和getEndingQuantity(item,quantityType)是为我提供给定项目和列的内容的方法。
我已经进行了调试,并且非常确定整个数据是否正确加载,这只是一个显示问题。 以下是一些屏幕截图,作为其他信息。
这些图像对应于:
如果使用Primefaces,则有一个类似lazyLoading的选项。如果指定true,则所有客户端的内容都将在服务器端处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.