【问题标题】:Is primefaces live scrolling compatible with Lazy loadingprimefaces 实时滚动是否与延迟加载兼容
【发布时间】:2014-04-07 08:20:42
【问题描述】:

我有一个需要显示大量数据集的数据表。所以我决定使用 primefaces 实时滚动。我还知道,要使用大量数据集提高数据表性能,我们需要实现延迟加载。参考primefaces 展示示例 here,我在声明中观察到的内容

,当分页、排序、过滤或实时滚动发生时,需要实现一个 LazyDataModel 来查询数据源

提到了实时滚动,但我看不到处理滚动的代码。它只有处理排序、过滤、行数和分页的代码。如果实时滚动和惰性数据模型实现都兼容,有人可以澄清我的困惑吗或者我应该添加一些代码来处理实时滚动。

【问题讨论】:

    标签: jsf-2 primefaces datatable


    【解决方案1】:

    它的工作方式与分页完全相同。

    这是一个小例子:

    xhtml

    <p:dataTable var="user"
            value="#{bean.lazyDataModel}"
            scrollRows="20"
            liveScroll="true"
            scrollHeight="500"
            lazy="true"
            scrollable="true">
    
            <p:column headerText="name">
               <h:outputText value="#{user.name}" />
            </p:column>
    
    </p:dataTable>
    

    @ManagedBean
    @ViewScoped
    public class Bean {
    
        private LazyDataModel<User> lazyDataModel;
    
        @EJB
        UserEJB userEJB;
    
        @PostConstruct
        public void init() {
           lazyDataModel = new LazyUserModel(userEJB);
        }
    
        public LazyDataModel<User> getLazyDataModel() {
            return lazyDataModel;
        }
    
        public void setLazyDataModel(LazyDataModel<User> lazyDataModel) {
           this.lazyDataModel = lazyDataModel;
        }
    
       //setters and getters for userEJB
    }
    

    LazyUserModel

    public class LazyUserModel extends LazyDataModel<User> {
       private Integer findAllCount;
    
       @EJB
       private UserEJB userEJB;
    
       public LazyUserModel(UserEJB userEJB) {
           this.userEJB = userEJB;
       }
    
    
       @Override
       public List<User> load(int first, int pageSize, String sortField, SortOrder sortOrder,
            Map<String, String> filters) {
    
           List<User> data = new ArrayList<User>();
           // pageSize is scrollRows="20" in the datatable
           data = userEJB.findAll(first, pageSize); 
           // findAll is using query.setFirstResult(first).setMaxResults(pageSize).getResultList()
    
          // rowCount
           if (findAllCount == null) {
               findAllCount = userEJB.findAllCount();
               this.setRowCount(findAllCount);
           }
    
           return data;
       }
    
    }
    

    希望这会有所帮助。

    【讨论】:

    • 感谢 Hatem 澄清了我的疑问。
    • :我发现你的解决方案有问题。我已经发布了问题here。你能看看吗。
    • 嘿哈蒂姆!你能解释一下为什么我们应该设置 RowCount 以及目的是什么? tnx
    • @anass 它是记录总数,这对分页(页面导航器)有帮助,在这种情况下,在 liveScroll 我不确定是否需要设置,没有试图消除呼叫.. 不过,保持相似是一个好习惯,以防您可能回到分页
    【解决方案2】:

    看起来在 6.1 中有一个新属性,liveScroll="true" https://github.com/primefaces/primefaces/issues/2105

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2023-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多