我的情况是分页应该是动态的。这意味着它应该随着load方法的每次调用而改变。
我想动态设置setRowCount()方法并为dataTable提供分页
@Override
public List<ProjectMasterModel> load(int first,int pageSize,StringsortField, SortOrder sortOrder, Map<String, String> filters) {
List<ProjectMasterModel> data=new ArrayList<ProjectMasterModel>();
LazyDataModel<ProjectMasterModel> newdata = null;
ProjectMilestoneDaoImpl milestoneDaoImpl=(ProjectMilestoneDaoImpl) ObjectFactory.getBean("projectMilestoneDao");
SessionFactory sessionFactory=(SessionFactory) ObjectFactory.getBean("sessionFactory");
sessionFactory.getCurrentSession().beginTransaction();
try{
data.addAll(milestoneDaoImpl.populateLazyRandomProjects(first,pageSize));
setRowCount(milestoneDaoImpl.getRowCount_Of_ProjectList());
// very important line to show the pagination
}catch(Exception e){
CmsLogger.errorLog(LazyProjectDataModel.class, e);
}finally{
sessionFactory.getCurrentSession().close();
}
if(sortField != null)
Collections.sort(data,new ProjectMasterModel());
return data;
}
这里我使用了一个查询来获取数据大小来设置行数。 在给定的情况下,它们可能是添加到数据库的记录数。 所以分页应该动态增加。 但是,如果我将setRowCount()方法更改为动态值,则它不会反映它保留其第一次设置的原始值。
答案 0 :(得分:1)
PrimeFaces不支持开箱即用。 A fix has been checked in to trunk on Feb 11th 2016, tagged 6.0(因此至少应该在当前的6.0RCx版本中)。我不确定它是否属于Elite版本&gt; = 5.2.20或&gt; = 5.3.7(从2月12日起)
这种方法无效的一个重要原因是,您可能在加载方法服务器端执行的更新的rowCount 不应用于分页器客户端。但是,由于从服务器传输到客户端,您可以在每个ajax调用(页面,排序,过滤器)的oncomplete中更新它。事实上,这是patch的很大一部分(另一部分是从ajax响应中读取值)。
结合使用例如ajax页面事件的完成将解决问题:
function updatePaginator(xhr, status, args) {
var paginator = PF('DataTableWidgetVar').paginator;
paginator.cfg.rowCount=args.totalRecords;
paginator.cfg.pageCount = Math.ceil(value / paginator.cfg/rows)||1;
paginator.updateUI();
}
然后,您可以在加载方法的每次调用中
答案 1 :(得分:1)
MyMB.java
List<NameClass> listResult = new LazyDataModel<NameClass>() {
private static final long serialVersionUID = 1L;
@Override
public List<NameClass> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
List<NameClass> result = dao.findReg(....., pageSize, page);
setRowCount(numberOfResult);
return result;
}
};
getListResult() {..}
setListResult(List<NameClass> l ) {...}
myPage.xhtml
<p:dataTable lazy="true"
value="#{myMB.listResult}"
var="model"
paginator="true"
rows="#{myMB.pageSize}"
paginatorPosition="bottom"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" >