【发布时间】:2014-02-04 09:26:29
【问题描述】:
我对 Primefaces 中的 lazyDataModel 有疑问。 如果我有 1 个结果要显示,则显示一行与好的结果。 如果我要显示 2 个结果,则显示两行,但两行相同。 如果我要显示 3 个结果,则显示三行,但三行相同。 ...
你有想法吗? 为什么它不起作用?
在我尝试做一些非通用的事情之前,在 getRowKey 中返回 categoryId 但这是同样的错误。
(我不知道它是否已绑定(链接),但是当我使用过滤器时,所有行都消失了,没有结果)
这是我的数据表:
<h:form>
<p:dataTable id="table1" var="category" rowKey="#{category.categoryId}" value="#{listCategoryBean.lazyModel}" paginator="true" rows="7" paginatorPosition="bottom"
paginatorTemplate="{CurrentPageReport} {FirstPageLink}{CurrentPageReport} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="7,20,50,100" widgetVar="dataTable" currentPageReportTemplate="(Number of Records: {totalRecords})"
emptyMessage="No screenshot data found with given criteria" lazy="true" scrollable="true"
scrollHeight="217" style="width: 100%;">
<f:facet name="header">
#{msgs.categoryList}
</f:facet>
<p:column headerText="#{msgs.common_name}" filterBy="#{msgs.common_name}" filterMatchMode="contains" style="width:25%">
<h:outputText value="#{category.name}" />
</p:column>
<p:column headerText="#{msgs.common_description}" style="width:25%">
<h:outputText value="#{category.description}" />
</p:column>
</p:dataTable>
</h:form>
这是我的豆子
private LazyDataModelBase<Category> model =
new LazyDataModelBase<Category>(categoryFacade);
public void setModel(LazyDataModelBase<Category> model) {
this.model = model;
}
public LazyDataModelBase<Category> getModel() {
model.setFacade(categoryFacade);
return model;
}
这是 LazyDataModelBase :
公共类 LazyDataModelBase 扩展 LazyDataModel {
private volatile AbstractFacade<T> facade;
private List<T> data;
private int rowCount;
@Override
public int getRowCount() {
return rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
public LazyDataModelBase(AbstractFacade<T> facade) {
super();
this.facade = facade;
}
public final AbstractFacade<T> getFacade() {
return facade;
}
public final void setFacade(AbstractFacade<T> facade) {
this.facade = facade;
}
@Override
public List<T> load(int first, int pageSize, String sortField,
SortOrder sortOrder, Map<String,String> filters) {
this.setRowCount(facade.count(filters));
List<T> list = facade.load(first, pageSize,
sortField, sortOrder, filters);
data = list;
if (list == null) {
throw new RuntimeException("La liste est null");
}
return list;
}
@Override
public T getRowData() {
if(data == null)
return null;
int index = super.getRowIndex() % super.getPageSize();
if(index > data.size()){
return null;
}
return data.get(index);
}
@Override
public Object getRowKey(T object) {
return object.toString();
}
@Override
public void setRowIndex(int rowIndex) {
/*
* The following is in ancestor (LazyDataModel):
* this.rowIndex = rowIndex == -1 ? rowIndex : (rowIndex % pageSize);
*/
if (rowIndex == -1 || getPageSize() == 0) {
super.setRowIndex(-1);
}
else
super.setRowIndex(rowIndex % getPageSize());
}
【问题讨论】:
标签: jsf-2 primefaces lazy-loading