我正在使用primefaces 6.0
and seam 2.2
,jsf 2.2
试图lazydatamodel
在p:dataTable
.
我已经创建了自己的特定于数据表中实体的 LazyDataType,并在类中定义了一个加载覆盖方法。
该表已正确呈现,但我必须在初始化时手动设置结果的第一页,加载方法永远不会在表更新时触发。
我注意到,DataTable.class
在调试中运行 Primefaces 时,它遇到了loadLazyData()
-- 方法,找到了正确的模型,它属于我的扩展类lazyDataModel
类型,但是当它到达这一行时if(model != null && model instanceof LazyDataModel)
,它返回false
。
模型对象绝对不是 null 并且我的类的类型扩展了LazyDataModel
类型,所以这应该返回 true
我猜这就是 load 方法没有触发的原因……</p>
有没有人遇到过这个问题?任何帮助,将不胜感激。
谢谢
我的扩展类如下所示
public class CompetitionUserLazyDataModel extends LazyDataModel<CompetitionUser>{
/**
*
*/
private static final long serialVersionUID = -5634037604279083091L;
private Competition competition;
public CompetitionUserLazyDataModel(){
}
public CompetitionUserLazyDataModel(Competition competition, int rowCount){
this.setCompetition(competition);
super.setRowCount(rowCount);
super.setRowIndex(0);
super.setPageSize(5);
}
@SuppressWarnings("unchecked")
@Override
public CompetitionUser getRowData(String rowKey) {
List<CompetitionUser> data = (List<CompetitionUser>) super.getWrappedData();
return data.get(Integer.parseInt(rowKey));
}
@SuppressWarnings("unchecked")
@Override
public Object getRowKey(CompetitionUser competitionUser) {
List<CompetitionUser> data = (List<CompetitionUser>) super.getWrappedData();
return data.indexOf(competitionUser);
}
@Override
public List<CompetitionUser> load(int first, int pageSize, String sortField,
SortOrder sortOrder, Map<String, Object> filters) {
CompetitionUserDAO competitionUserDAO = (CompetitionUserDAO)Component.getInstance("competitionUserDAO");
List<CompetitionUser> results = competitionUserDAO.getLazyListOfCompetionUsersForCompetetion(this.competition, first, pageSize);
this.setWrappedData(results);
this.setRowCount(this.competition.getNoCompetitors());
return results;
}
public Competition getCompetition() {
return competition;
}
public void setCompetition(Competition competition) {
this.competition = competition;
}
}