Jsf 2 JSF PrimeFaces DataScroller,延迟加载,无分页(无限滚动)
因为它是一个新组件,所以可能不太稳定 是否有人使用实际数据源(如DB)实现了延迟加载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
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;
}
}