由于它是一个新组件,它可能不会那么稳定。
有没有人设法使用实际数据源(例如数据库)实现this data scroller延迟加载?
的index.xhtml
<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>
PostLoaderBacking
@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;
}
}
我的解决方案可以正常工作。它只加载两个块。例如,如果我的块大小是2(没有双关语),那么它总共将加载4个帖子,尽管我有更多的帖子来自。
为什么它会在某个时刻停止加载?我向下滚动页面,没有任何反应。 primefaces实现决定它应该加载哪个标准?
答案 0 :(得分:0)
我已经实现了一个由实时数据库支持的DataScroller。
我不确定postEJB
会发生什么,所以我无法确定,但你对它的打电话看起来很奇怪。尝试使用调试器(或添加一些记录器消息)以查看向下滚动时是否正在调用load()
,并确切查看postEJB.loadLatestPosts()
正在返回的内容。我怀疑 - 如果我是推定的话,请原谅我 - EJB调用实际上应该是postEJB.loadLatestPosts(first, pageSize)
,并且startingFrom
和CHUNK_SIZE
可以被抛弃。
您可能还想设置数据模型的行数;即,
lazyModel.setRowCount(postCount);
我不确定DataScroller是否实际使用它,但它不会受到伤害。 :)
答案 1 :(得分:0)
我遇到了同样的问题。
我的问题是我在LazyDataModel中使用了setRowCount(currentNumberOfRows)。 这导致加载内容恰好两次 - 因为您的问题也是如此。
尝试将rowCount设置为数据库中可用的总行数。