我正在使用带有 Ajax 分页的数据列表,第一页加载良好,显示 5 个结果。它知道我有 3 页的结果,但是当我单击第二/第三页时,我得到一个空列表。
我的模型扩展了 LazyDataModel 并且第一次加载页面时,我可以在 load() 方法上设置断点,我可以看到它要求结果 1-5,这很棒。但是单击“第 2 页”不会导致再次调用 load 方法(尽管它确实会导致大约 3 次调用我的lazyDataModel 字段本身(只是不是其中的 load 方法)。
对此很陌生,尽管阅读了很多并尝试了各种事情,但我不太明白它应该如何工作。展示示例对我来说似乎并不“完整”。
这是我的代码中最相关的部分(我认为)。对格式感到抱歉:
@PostConstruct
public void LoadData() {
lazyModel = new LazyDataModel<MessageboardThread>() {
@Override
public List<MessageboardThread> load(int first, int pageSize, String sortField, SortOrder so, Map<String, String> map) {
List<MessageboardThread> result = new ArrayList<MessageboardThread>();
try {
result = mbDao.findAll(pageSize, first);
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
};
getLazyModel().setRowCount(mbDao.count());
getLazyModel().setPageSize(pageSize);
}
每次点击下一页/上一页时都会执行此方法 /** * @return thelazyModel */ public LazyDataModel getLazyModel() { return lazyModel; }
这是我的 xhtml 文件
<p:dataList value="#{messageboardBean.lazyModel}" var="thread" id="threads"
paginator="true" rows="5" effectSpeed="fast"
paginatorTemplate="{PreviousPageLink} {CurrentPageReport} {NextPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15" type="none"
paginatorPosition="bottom">
<f:facet name="header">
Conversations
</f:facet>
<p:column>
<h:outputText value="#{thread.title}" style="margin-left:10px" />
<br />
</p:column>
</p:dataList>
我很难过,非常感谢任何帮助
PS我在那里放了一个@PostContruct注释,因为它似乎是一个进行设置的好地方,但它可能是错误的,我没有在任何其他示例中看到它,但是我也无法让任何其他示例工作.