带有后端的JSF Primefaces分页

时间:2019-02-18 14:42:15

标签: jsf primefaces pagination

也许有点奇怪,但是我不知道如何将PrimeFaces的分页功能传到我的后端。我知道这里有展示柜,这里有多个答案,但我在质疑它是否真的必须是这样。 另外,我的项目没有DAO和事物的结构,这使我陷入了黑暗。

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

但是现在它更大了,拥有一个真正的数据库等等。我已经实现了搜索,可以使用“规范”来查找对象。在那里,我还可以为搜索提供可分页的对象。

我以为我可以为正常显示数据表做一个可分页的对象,并以某种方式将其连接到Primefaces的按钮上。

因为我使用

将数据加载到视图的控制器中
public void loadData() {
        eintraege = telefonbuchRepository.findAll();
}

因此,我在这里不知道如何使用延迟加载过程。如果我错了,也请教我,其他地方已经可以解决这个问题。

1 个答案:

答案 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得到了页码。

别忘了LazyDataModelpageSize的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">