我使用primefaces 3.1,我有一個數據表顯示分頁數據,其列基於頁面數據構建,並通過<p:columns/>
標記呈現。採用這種方法,同一個數據表的不同頁面可以有不同的列。我想它會默認重新呈現分欄上的列,但事實並非如此。我試過<p:ajax event="page" update="myTable"/>
和<p:ajax event="page" update="myTableContainer"/>
運氣好。如何在分頁後刷新數據表動態列
有沒有辦法在觸發分頁時重新呈現整個數據表,所以不僅內容而且列標題都能正確顯示?
編輯:繼承人一些代碼示例,如您所請求。
香港專業教育學院做了我自己的實現LazyDataModel和擴展其覆蓋負載方法實現:
@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實施atributes與它們對應的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>
inventoryMovementsBean.view是我LazyDataModel實例和方法getOperationValue(項目,stockOperation),getStartingQuantity(項目,quantityType)和getEndingQuantity(項目,quantityType)是給我的內容給予一個項目和一列。
我已經做了一個調試,並且我很確定整個數據都是加載的,這只是一個顯示問題。以下是一些截圖作爲附加信息。
這些圖像對應於:
- 初始渲染(第1頁)。
- 實際渲染分頁(第3頁)
- 預計分頁後渲染(第3頁)之後
是您的託管bean至少'@ ViewScoped',和您的數據保存你的''堅持在每一個新的頁面調用? –
2013-02-26 22:05:48
是的。我的問題基本上是rerendereing列標題,頁面內容顯示爲所需 – Juan 2013-02-27 04:19:57
我想如果你分享一個[SSCCE](http://sscce.org)你的代碼,以幫助你,這將是偉大的。 – 2013-02-27 04:56:09