0

如何<p:dataScroller>在我的支持 bean 中获得以下属性?

  1. 页面索引(我在分页中的哪一页上)
  2. 页数
  3. 页面索引
  4. 第一行索引
  5. 最后一行索引

我尝试了组件绑定,但一切都只是返回null

4

1 回答 1

0

<p:dataScroller>很多问题,但是如果您想要这些属性,则必须间接获取它们,因为如果您不使用lazyDataModel,dataScroller 会立即获取所有数据并执行其工作,从不回调托管豆。

使用延迟加载模型。您将不得不快速实现,org.primefaces.model.LazyDataModel但它只有大约 20 行代码。在 managedBean 上创建一个返回请求的 subList 的方法;在该托管 bean 中,您将获取所需的值。

import java.util.List;
import java.util.Map;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

class MsgLogLazyModel extends LazyDataModel<YourPojo> {
    private static final long serialVersionUID = 1L;
    private ManagedBean mb;

    public MsgLogLazyModel(ManagedBean mb) {
        this.mb = mb;
    }

    @Override
    public List<YourPojo> load(int first, int pageSize, String sortField,
            SortOrder sortOrder,
            Map<String, Object> filters) {
        return mb.loadItens(first, pageSize, sortOrder, filters);
    }   
}

YourPojo 应该是您传递给 dataScroller 以进行显示的对象。

假设您必须显示的项目存储在 MB 属性中

private List<YourPojo> myList;

现在,mb.loadItens()您将捕获:

  1. 页面索引(我在分页中的哪一页上)

int pageIndex = first / pageSize;

  1. 页数

// you have to round up this because the last page will have less than pageSize itens
int pageCount = (int) Math.ceil(myList.size() / new Double(pageSize));

  1. 页面索引

你在重复自己。

  1. 第一行索引

我会假设你想要返回块的第一行。那就是first参数。由于 dataScroller 没有分页...

  1. 最后一行索引

// maybe the list has ended. so we take the safe path...
int lastRow = Math.min(myList.size(), first + pageSize)

于 2015-07-02T19:03:24.637 回答