0

遅延読み込みに問題があります。遅延読み込みなしでは正常に動作していますが、遅延読み込み後はデータが取得されません。怠惰なデータ モデルの作成に問題があると思います。

編集:私が見つけたのは、遅延モデルのロード メソッドが呼び出されていないことです。

これが私のデータテーブルです。

<p:dataTable id="companiesDataTable"
                         var="company" value="#{myController.lazyCompanyDataModel}"
                         rowKey="#{company.uuid}"
                         lazy="true"
                         sortMode="multiple" rows="5" paginator="true">

私の春のコントローラー;

private LazyDataModel<Company> lazyCompanyDataModel;
private List<Company> companyList;

@Override
public void init() {
    lazyCompanyDataModel = new LazyCompanyDataModel(companyList);

    selectedCompany = new Company();     

}

私のデータモデル;

public class LazyCompanyDataModel extends LazyDataModel<Company> {  


GenericService genericService;

private List<Company> datasource;
private int pageSize;
private int rowIndex;
private int rowCount;

public LazyCompanyDataModel(List<Company> datasource) {  
    this.datasource = datasource;        
}

@Override
public List<Company> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {
    datasource = genericService.getByTemplate(new Company(), first, pageSize,new Order(null,Order.convertSortOrder(sortField)) );
    setRowCount((int) genericService.getCountByTemplate(new Company()));
    return datasource;
}
 @Override
public boolean isRowAvailable() {
    if(datasource == null)
        return false;
    int index = rowIndex % pageSize ;
    return index >= 0 && index < datasource.size();
}

@Override
public Object getRowKey(Company company) {
    return company.toString();
}

@Override
public Company getRowData() {
    if(datasource == null)
        return null;
    int index =  rowIndex % pageSize;
    if(index > datasource.size()){
        return null;
    }
    return datasource.get(index);
}

@Override
public Company getRowData(String rowKey) {
    if(datasource == null)
        return null;
   for(Company company : datasource) {
       if(company.toString().equals(rowKey))
       return company;
   }
   return null;
}

@Override
public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
}

@Override
public int getPageSize() {
    return pageSize;
}

@Override
public int getRowIndex() {
    return this.rowIndex;
}

@Override
public void setRowIndex(int rowIndex) {
    this.rowIndex = rowIndex;
}

@Override
public void setRowCount(int rowCount) {
    this.rowCount = rowCount;
}

@Override
public int getRowCount() {
    return this.rowCount;
}

@Override
public void setWrappedData(Object list) {
    this.datasource = (List<Company>) list;
}

@Override
public Object getWrappedData() {
    return datasource;
}

}

4

1 に答える 1

2

LazyDataModel の getRowCount メソッドをオーバーライドして、テーブルに表示する行数とページ数を設定できるようにする必要があります。load メソッド内で rowCount を設定しないでください。

于 2013-05-01T11:36:13.107 に答える