也许有点奇怪,但是我不知道如何将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);
}
您应该像lowsperpagetemplate一样选择int pageize。因为我正在使用Jparepository,所以我想利用规格和可触摸对象的机会。可触摸对象的形式是 PageRequest.of(int page, int size)
因此,我需要获取Pagenumber,而不是此页面的第一个。只是一个简单的IF语句帮助我决定是否是第一页。我得到了带有first / pageSize
的pagenumber。
不要忘记LazyDataModel
和pageSize
的GETETER和固定器。
我的.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">