【问题标题】:Problems in LazyDataModel. Don't reset the first parameterLazyDataModel 中的问题。不要重置第一个参数
【发布时间】:2018-03-11 00:36:40
【问题描述】:
我对 JSF 中的 LazyDataModel(列表)有疑问。问题是下一个:
我有一个带有搜索表单和搜索结果列表的 xhtml。当我继续浏览页面时,我会进行第一次搜索并在此分页列表上显示,例如,在第四页中:
如果我实现了一个新的搜索,在这个新的结果中,第4页的列表收费。参数首先不要在每次新的搜索中重置。为什么?
- bean 有注释:@Component 和 @ViewScoped。
- 带有结果的列表是一个 LazyDataModel 并覆盖了以下方法:load、getRowKey 和 getRowData。
- 版本是:JSF 2.0、PrimeFaces 6.1 和 Spring 4.0.3.RELEASE。
【问题讨论】:
标签:
spring
primefaces
jsf-2
lazydatamodel
【解决方案1】:
问题在于您是否维护相同的数据模型。刷新列表时需要创建一个新的数据模型。
例如数据模型:
public class MyDataModel extends LazyDataModel<MyEntity> {
// my datamodel
}
还有 bean(在本例中为 CDI)
@Named
@ViewScoped
public class MyBean implements Serializable {
private static final long serialVersionUID = 1L;
private MyDataModel myDataModel;
//calling this method, a new datamodel is created and populated
public void search() {
List myList = new ArrayList(); //load from database
loadDatamodel(myList);
}
private void loadDatamodel(List myList) {
myDataModel = new MyDataModel(myList);
}
public MyDataModel getMyDataModel() {
return myDataModel;
}
}
因此,在每次搜索中,都会创建一个新的数据模型。