JSF Primefaces与后端的分页[复制]

问题描述 投票:0回答:1

这个问题在这里已有答案:

也许这有点奇怪,但我不知道如何将PrimeFaces分页到我的后端。我知道有展示,这里有多个答案,但我在质疑它是否真的必须像这样。此外,我的项目不是用DAO和东西构建的,这使我处于黑暗中。

我使用Spring Boot配置。整个项目的基础是教程https://dzone.com/articles/developing-jsf-applications-with-spring-boot

但现在它更大,有一个真正的数据库和这样的东西。我已经实现了一个搜索,我使用规范来查找对象。在那里我也可以给搜索一个可分页的对象。

在我的脑海中,我想我可以为普通的数据表做一个可分页的对象,并以某种方式将它连接到Primefaces的按钮。

因为我将数据加载到视图的控制器中

public void loadData() {
        eintraege = telefonbuchRepository.findAll();
}

所以我不知道如何在这里使用延迟加载过程。如果我错了也请教我,其他地方已经有了答案。

jsf primefaces pagination
1个回答
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);
    }

你应该像你的rowsPerPageTemplate一样选择int pageSize。因为我正在使用JpaRepository我想使用规范和可分页对象的机会。 Pageable对象的形式是PageRequest.of(int page, int size)

所以我需要获取页面编号而不是本页面的第一页。只是一个简单的if语句帮助我决定它是否是第一页。我得到了first / pageSize的页面编号。

不要忘记LazyDataModelpageSize的吸气剂和二传手。

我的.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">
© www.soinside.com 2019 - 2024. All rights reserved.