我建立一个单一的网页应用程序的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'。我更新了我的问题,并为此添加了一个答案。谢谢.. :) –