2013-04-29 3 views
0

게으른 로딩에 문제가 있습니다. lazyloading 없이는 정상적으로 작동하지만 게으른로드 후에는 데이터가 없습니다. 나는 게으른 데이터 모델 생성에 문제가 있다고 생각한다.느린 로딩 중 데이터 테이블에 데이터 없음

편집 : 게으른 모델의로드 메소드가 호출되지 않습니다.

여기 내 데이터 테이블입니다.

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

My Spring Controller;

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; 
} 

}

답변

1

당신은 테이블에 지금 얼마나 많은 행을 보여주고 얼마나 많은 페이지 할 수 있도록 LazyDataModel의로 getRowCount 메서드를 재정의해야합니다. rowCount를 load 메소드에 설정하지 마십시오.