在辅助bean中获取<p:datascroller>的属性

时间:2015-04-25 20:54:07

标签: jsf primefaces datascroller

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

  1. 页面索引(我在分页的页面上)
  2. 页数
  3. 页面索引
  4. 第一行索引
  5. 最后一行索引
  6. 我尝试了组件绑定,但一切都只返回null

1 个答案:

答案 0 :(得分:0)

<p:dataScroller>有很多问题,但是如果你想要这些属性,你必须间接获取它们,因为如果你不使用lazyDataModel,dataScroller会立即获取所有数据,离开做它的东西,永远不回调managedBean。

使用延迟加载模型。您必须快速实现org.primefaces.model.LazyDataModel,但它只有大约20行代码。在managedBean上创建一个返回所请求的子列表的方法;在托管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. 页面索引(我在分页的页面上)
  2.   

int pageIndex = first / pageSize;

  
      
  1. 页数
  2.   

// 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. 页面索引
  2.   

你在重复自己。

  
      
  1. 第一行索引
  2.   

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

  
      
  1. 最后一行索引
  2.   

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