rks*_*rks 4 datatable primefaces jsf-2
我有一个数据表,需要显示大量的数据集.所以我决定使用primefaces实时滚动.我还要知道,为了提高数据集的性能,我们需要实现延迟加载的大数据集.参考primefaces展示这里的例子 ,我在声明中观察到的
,当分页,排序,过滤或实时滚动发生时,需要实现LazyDataModel来查询数据源
提到了实时滚动,但是我看不到处理滚动的代码.它只有处理排序,过滤,行数和分页的代码.如果实时scolling和懒惰数据模型实现相互兼容,或者有人请澄清我的困惑或者我应该添加一些代码来处理实时滚动.
它的工作方式与您分页时的效果完全相同.
这是一个小例子:
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>
Run Code Online (Sandbox Code Playgroud)
豆
@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
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
8814 次 |
| 最近记录: |