【问题标题】:Duplicate Data rows in LazyDataModel primefacesLazyDataModel primefaces 中的重复数据行
【发布时间】: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


    【解决方案1】:

    我纠正了错误。 错误是我在最后一个 jsf 页面中创建了一个 bean 类别,所以我将信息保存在 requestScope 中,所以 #{category.name} 始终指的是创建的 bean

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-21
      • 2012-03-08
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 2011-09-04
      相关资源
      最近更新 更多