[英]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.