这个问题在这里已有答案:
也许这有点奇怪,但我不知道如何将PrimeFaces分页到我的后端。我知道有展示,这里有多个答案,但我在质疑它是否真的必须像这样。此外,我的项目不是用DAO和东西构建的,这使我处于黑暗中。
我使用Spring Boot配置。整个项目的基础是教程https://dzone.com/articles/developing-jsf-applications-with-spring-boot
但现在它更大,有一个真正的数据库和这样的东西。我已经实现了一个搜索,我使用规范来查找对象。在那里我也可以给搜索一个可分页的对象。
在我的脑海中,我想我可以为普通的数据表做一个可分页的对象,并以某种方式将它连接到Primefaces的按钮。
因为我将数据加载到视图的控制器中
public void loadData() {
eintraege = telefonbuchRepository.findAll();
}
所以我不知道如何在这里使用延迟加载过程。如果我错了也请教我,其他地方已经有了答案。
我解决了所以我刚刚实现了LazyDataModel
public class TelefonbuchListController extends LazyDataModel<Telefonbuch> {
private LazyDataModel<Telefonbuch> lazyModel;
private static final long serialVersionUID = 1L;
private int pageSize = 5;
public void loadData() {
lazyModel = new LazyDataModel<Telefonbuch>() {
private static final long serialVersionUID = 1L;
@Override
public List<Telefonbuch> load(int first, int pageSize, String sortField, SortOrder sortOrder,
Map<String, Object> filters) {
List<Telefonbuch> result = new ArrayList<Telefonbuch>();
if (first == 0) {
result = telefonbuchRepository.findAll(PageRequest.of(first, pageSize)).getContent();
} else {
first = first / pageSize;
result = telefonbuchRepository.findAll(PageRequest.of(first, pageSize)).getContent();
}
return result;
}
};
lazyModel.setRowCount((int) telefonbuchRepository.count());
lazyModel.setPageSize(pageSize);
}
你应该像你的rowsPerPageTemplate一样选择int pageSize。因为我正在使用JpaRepository我想使用规范和可分页对象的机会。 Pageable对象的形式是PageRequest.of(int page, int size)
所以我需要获取页面编号而不是本页面的第一页。只是一个简单的if语句帮助我决定它是否是第一页。我得到了first / pageSize
的页面编号。
不要忘记LazyDataModel
和pageSize
的吸气剂和二传手。
我的.xhtml数据表看起来像这样:
<p:dataTable id="table" var="telefonbuch" lazy="true" widgetVar="tableWv" value="#{telefonbuchList.lazyModel}" style="margin-bottom:20px" paginator="true" rows="#{telefonbuchList.pageSize}" dynamic="true"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink} {Exporters}"
rowsPerPageTemplate="5,8,10">