JSF2和x2B;Primefaces:数据表延迟加载问题
我想,我的java代码是正确的,但记录并没有显示在dataTable上 请检查下面的代码。我不知道我在哪里犯了错误 .xhtmlJSF2和x2B;Primefaces:数据表延迟加载问题,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我想,我的java代码是正确的,但记录并没有显示在dataTable上 请检查下面的代码。我不知道我在哪里犯了错误 .xhtml <p:dataTable value="#{userDetailList.userDataList}" var="user" rows="5" paginator="true" lazy="true" paginatorTemplate="{Ro
<p:dataTable value="#{userDetailList.userDataList}" var="user" rows="5"
paginator="true" lazy="true"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink}
{CurrentPageReport} {NextPageLink} {LastPageLink}">
<p:column headerText="No">
<h:outputText value="#{user.id}"></h:outputText>
</p:column>
<p:column headerText="User Name">
<h:outputText value="#{user.userName}"></h:outputText>
</p:column>
</p:dataTable>
.java
@PostConstruct
public void init(){
// +getter , setter
userDataList = new LazyDataModel<UserDetail>(){
private static final long serialVersionUID = 1L;
@Override
public List<UserDetail> load(int first, int pageSize, String sortField,
SortOrder sortOrder, Map<String, String> filters) {
return lazyDataModelCom.getResultList(first, pageSize, sortField, sortOrder, filters);
}
};
}
@PostConstruct
公共void init(){
//+getter,setter
userDataList=新的LazyDataModel(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共列表加载(int first,int pageSize,String sortField,
排序器(排序器、映射过滤器){
返回lazyDataModelCom.getResultList(第一个,pageSize,sortField,sortOrder,filters);
}
};
}
getResultList
public List<UserDetail> getResultList(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
Session session = HibernateUtils.getsession();
Criteria criteria = session.createCriteria(UserDetail.class);
criteria.addOrder(Order.asc("id"));
for (Map.Entry<String, String> entry : filters.entrySet()) {
if (entry.getValue() != null) {
criteria.add(Restrictions.ilike("id",
"%" + entry.getValue() + "%")); }
}
criteria.setMaxResults(pageSize);
criteria.setFirstResult(first);
return criteria.list();
}
public List getResultList(int-first、int-pageSize、String-sortField、SortOrder-SortOrder、映射过滤器){
Session Session=HibernateUtils.getsession();
条件=session.createCriteria(UserDetail.class);
标准.addOrder(Order.asc(“id”));
对于(Map.Entry:filters.entrySet()){
if(entry.getValue()!=null){
criteria.add(Restrictions.ilike(“id”),
“%”+entry.getValue()+“%”);}
}
标准.setMaxResults(页面大小);
标准。setFirstResult(第一);
返回条件。list();
}
getResultList方法返回正确的值,我调试它。
我认为问题出在用户数据列表中 您的
LazyDataModel
实现未设置行数。你应该这样做:
public void init(){
// +getter , setter
userDataList = new LazyDataModel<UserDetail>(){
private static final long serialVersionUID = 1L;
@Override
public List<UserDetail> load(int first, int pageSize, String sortField,
SortOrder sortOrder, Map<String, String> filters) {
userDataList.setRowCount(...);
return lazyDataModelCom.getResultList(first, pageSize, sortField, sortOrder, filters);
}
};
userDataList.setRowCount(...);
}
public void init(){
//+getter,setter
userDataList=新的LazyDataModel(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共列表加载(int first,int pageSize,String sortField,
排序器(排序器、映射过滤器){
userDataList.setRowCount(…);
返回lazyDataModelCom.getResultList(第一个,pageSize,sortField,sortOrder,filters);
}
};
userDataList.setRowCount(…);
}
请注意,rowCount
在分页之前但在过滤之后提供行数
请参阅包含一个工作示例(唯一的区别是它使用JPA标准API而不是Hibernate标准):UserDataList和managedBean可序列化吗?