我建立一個單一的網頁應用程序的HTML與Primefaces 6.1,JSF 2.2並運行它Wildfly,其中有一個選項來搜索用戶。初始視圖只顯示帶有各種過濾器的搜索面板,點擊搜索時,將查詢用戶表並返回一組數據,然後在包含datatable
的視圖中呈現塊。以下是搜索用戶的延遲加載代碼。Primefaces惰性加載渲染行作爲分頁
public void getUsers(ActionEvent event) {
//few lines to get filterData
this.lazyUsers = new LazyDataModel<UserModel>() {
private static final long serialVersionUID = 1L;
@Override
public List<UserModel> load(int first, int pageSize, String sortField, SortOrder sortOrder,
Map<String, Object> filters) {
filterObject.setStartCount(new Long(first));
filterObject.setCountPerPage(new Long(pageSize));
List<UserModel> list = userService.getUsers(filterObject);
if (list != null)
this.setRowCount(list.get(0).getTotalNumberOfRecords().intValue());
RequestContext context = RequestContext.getCurrentInstance();
if(context!=null)
context.addCallbackParam("totalRecords", this.getRowCount());
return list;
}
};
}
這裏是我的表格視圖。
<p:outputPanel id="users" autoUpdate="true">
<p:outputPanel rendered="#{users.displayusers}">
<h5 class="title">
<h:outputText value="#{msg.header_title}"></h:outputText>
</h5>
<p:dataTable id="userTable" lazy="true" paginator="true"
rows="2"
emptyMessage="#{msg.emtpymsg}"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="2,4,5"
rendered="#{null != users.lazyUsers && not empty users.lazyUsers }"
value="#{users.lazyUsers}" var="user"
rowIndexVar="userRow">
<p:column headerText="#{msg.Name}">
<h:outputLabel class="tdRow" value="#{user.name}" />
</p:column>
<p:column headerText="#{msg.Phone}">
<h:outputLabel class="tdRow" value="#{user.phone}" />
</p:commandLink>
</p:column>
<p:column headerText="#{msg.Address}">
<h:outputLabel class="tdRow" value="#{user.address}" />
</p:column>
<p:column headerText="#{msg.Email}">
<h:outputLabel class="tdRow" value="#{user.email}" />
</p:column>
</p:dataTable>
</p:outputPanel>
</p:outputPanel>
一切呈現在搜索發生,但後來當我拼版它會尋找下一個頁面的數據,並獲取下一個頁面的數據,但它呈現爲普通的HTML取出數據表。在檢查html時,我只能看到tr
,td
作爲來自網絡選項卡中的服務器的響應,並且只有其中的內容被直接呈現爲div
。數據表未預先保存。任何人都可以讓我知道這裏發生了什麼。
我也試圖捕捉頁事件中datatable
並添加update
價值
<p:ajax event="page" update="userContainer:userTable"></p:ajax>
但同樣沒有幫助。希望能找到一些幫助。
更新
我注意到,這種情況對任何AJAX操作通過datatables
一樣,篩選,排序,rowsperpage變化等,有沒有什麼辦法,以確定在什麼不對的?
[Primefaces Datatable display bug]可能的副本(https://stackoverflow.com/questions/44270955/primefaces-datatable-display-bug) – Kukeltje
@Kukeltje儘管問題有點類似於他的解決方案是使用在''ajax'分頁'process'而不是'update'。我更新了我的問題,併爲此添加了一個答案。謝謝.. :) –