也许有点奇怪,但是我不知道如何将PrimeFaces的分页功能传到我的后端。我知道这里有展示柜,这里有多个答案,但我在质疑它是否真的必须是这样。 另外,我的项目没有DAO和事物的结构,这使我陷入了黑暗。
我使用Spring Boot配置。整个项目的基础是教程https://dzone.com/articles/developing-jsf-applications-with-spring-boot
但是现在它更大了,拥有一个真正的数据库等等。我已经实现了搜索,可以使用“规范”来查找对象。在那里,我还可以为搜索提供可分页的对象。
我以为我可以为正常显示数据表做一个可分页的对象,并以某种方式将其连接到Primefaces的按钮上。
因为我使用
将数据加载到视图的控制器中public void loadData() {
eintraege = telefonbuchRepository.findAll();
}
因此,我在这里不知道如何使用延迟加载过程。如果我错了,也请教我,其他地方已经可以解决这个问题。
答案 0 :(得分:0)
我解决了。所以我刚刚实现了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);
}
您应该选择int pageSize,例如您的rowsPerPageTemplate中的一个。因为我正在使用JpaRepository,所以我想利用Specification和Pageable对象的机会。 Pageable对象的形式为PageRequest.of(int page, int size)
所以我需要获取页码而不是此页的第一页。只是一个简单的if语句就可以帮助我确定它是否是第一页。我用first / pageSize
得到了页码。
别忘了LazyDataModel
和pageSize
的getter和setter。
我的.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">