Jsf 2 JSF PrimeFaces DataScroller,延迟加载,无分页(无限滚动)

Jsf 2 JSF PrimeFaces DataScroller,延迟加载,无分页(无限滚动),jsf-2,primefaces,lazy-loading,primefaces-extensions,datascroller,Jsf 2,Primefaces,Lazy Loading,Primefaces Extensions,Datascroller,因为它是一个新组件,所以可能不太稳定 是否有人使用实际数据源(如DB)实现了延迟加载 index.xhtml 后装载包装 @ManagedBean(name=“postLoader”) @视域 公共类PostLoaderBack实现可序列化 { //=========================1.静态字段============================== 私有静态最终长serialVersionUID=2732106678777694908L; 私有静态最终整块大小=5

因为它是一个新组件,所以可能不太稳定

是否有人使用实际数据源(如DB)实现了延迟加载


index.xhtml




后装载包装

@ManagedBean(name=“postLoader”)
@视域
公共类PostLoaderBack实现可序列化
{
//=========================1.静态字段==============================
私有静态最终长serialVersionUID=2732106678777694908L;
私有静态最终整块大小=5;
//======================2.实例字段============================
@EJB
私有PostEJB-PostEJB;
私人国际邮政计数;
私人LazyDataModel lazyModel;
//===============================4.施工人员===============================
@施工后
公共void init()
{
postCount=postEJB.getPostCount();
lazyModel=新的LazyDataModel(){
私有静态最终长serialVersionUID=-4742720028771554420L;
@覆盖公共列表加载(final int first,final int pageSize,
最终字符串排序字段,最终排序器排序器,
最终映射过滤器){
最终整数起始值=后计数-第一;
返回postEJB.loadLatestPosts(从开始,块大小);
}
};
}
//===========================================================================================================================7.获得者和获得者======================
公共LazyDataModel getLazyModel()
{
返回lazyModel;
}
}

我的解决方案在一定程度上是可行的。它只加载两个块。例如,如果我的区块大小是2(没有双关语),那么它将总共加载4篇文章,尽管我有更多的文章来自哪里


为什么它会在某个点停止加载?我向下滚动页面,什么也没发生。primefaces实现根据哪些标准决定是否加载?

我已经实现了一个由实时数据库支持的DataScroller

我不确定在
postEJB
中会发生什么,所以我不能确定,但是您对它的调用对我来说很奇怪。尝试使用调试器(或添加一些记录器消息)查看向下滚动时是否调用了
load()
,并查看
postEJB.loadLatestPosts()
返回的确切内容。我的怀疑——如果我是假设的话,请原谅我——是EJB调用实际上应该是类似于
postEJB.loadLatestPosts(第一个,pageSize)
,并且
开始和
CHUNK\u SIZE
可以放弃

您可能还需要设置数据模型的行数;即。,
lazyModel.setRowCount(后计数)


我不确定DataScroller是否真的使用了它,但它不会造成伤害。:)

我也有同样的问题

我的问题是我在LazyDataModel中使用了setRowCount(currentNumberOfRows)。 这导致加载内容的次数正好是问题的两倍


尝试将rowCount设置为数据库中可用的总行数。

加载的标准是rowCount/pagesize。除非通过调用LazyDataModel.setRowCount()来设置rowCount,并在load()方法之外使用正确的数字。
<p:dataScroller value="#{postLoader.lazyModel}" var="post" lazy="true" chunkSize="5">

    <article>
        <h:outputText value="#{post.title}" />
        <br />
        <p:graphicImage value="/files/#{post.blobPath}" />
    </article>

    <hr />
</p:dataScroller>
@ManagedBean(name = "postLoader")
@ViewScoped
public class PostLoaderBacking implements Serializable
{

    // ==================== 1. Static Fields ==============================

    private static final long serialVersionUID = 2732106678777694908L;

    private static final int CHUNK_SIZE = 5;


    // ==================== 2. Instance Fields ============================

    @EJB
    private PostEJB postEJB;

    private int postCount;

    private LazyDataModel<PostEntity> lazyModel;


    // ==================== 4. Constructors ===============================

    @PostConstruct
    public void init()
    {
        postCount = postEJB.getPostCount();

        lazyModel = new LazyDataModel<PostEntity>() {

            private static final long serialVersionUID = -4742720028771554420L;

            @Override public List<PostEntity> load(final int first, final int pageSize,
                    final String sortField, final SortOrder sortOrder,
                    final Map<String, Object> filters) { 


                final int startingFrom = postCount - first; 

                return postEJB.loadLatestPosts(startingFrom, CHUNK_SIZE);
            }
        };
    }


    // ==================== 7. Getters & Setters ======================

    public LazyDataModel<PostEntity> getLazyModel()
    {
        return lazyModel;
    }

}