gpt4 book ai didi

JSF2 + Primefaces : DataTable lazy loading issue

转载 作者:行者123 更新时间:2023-12-04 20:04:09 25 4
gpt4 key购买 nike

我想,我的 java 代码是正确的,但数据表上没有显示记录。

请检查以下代码。我不知道我哪里弄错了。

.xhtml

 <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);
}
};
}

获取结果列表

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();
}

getResultList 方法返回一个正确的值,我调试它。我认为问题出在 userDataList 中。

最佳答案

您的 LazyDataModel 实现未设置 rowCount。你应该这样做:

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(...);
}

请注意 rowCount 是在 分页之前但 过滤之后提供的行数。

参见 this answer包含一个工作示例(唯一的区别是它使用 JPA Criteria API 而不是 Hibernate Criteria):

关于JSF2 + Primefaces : DataTable lazy loading issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16517282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com