2013-10-28 90 views
0

我是JSF的新手,我正在使用primefaces-2.2.RC2。 我有一個commandButton,當我點擊我希望它填充使用lazyLoading(我的工作基於primefaces展示)的dataTable。 當我點擊commandButton時,數據未加載。Primefaces上的懶加載+命令按鈕

這一塊我的代碼:

<p:commandButton value="Search" 
       action="#{tableBean.search()}" 
       update="carList" 
            /> 
<p:dataTable id="carList" 
      var="car" 
      value="#{tableBean.lazyDataModel}" 
      paginator="true" 
      rows="10" 
      dynamic="true" 
      lazy="true" 
      paginatorPosition="bottom" 
      > 
我的豆

安德:

@ViewScoped 
public class TableBean { 
    LazyDataModel<Car> lazyDataModel; 
    public TableBean() { 
     lazyDataModel = new LazyDataModel<Car>() { 
      @Override 
      public List<Car> load(int i, int i1, String string, boolean bln, Map<String, String> map) { 
       return new ArrayList<Car>(); 
      } 
     }; 
    } 

    public LazyDataModel<Car> getLazyDataModel() { 
     return lazyDataModel; 
    } 

    public void search() { 
     lazyDataModel = new LazyDataModel<Car>() { 
      @Override 
      public List<Car> load(int first, int pageSize, String sortField,boolean sortOrder, Map<String, String> filters) { 
       return fetchLazyData(first, pageSize); 
      } 

      @Override 
      public void setRowIndex(int rowIndex) {     
       setPageSize(10); 
       if (rowIndex == -1 || getPageSize() == 0) { 
        super.setRowIndex(-1); 
       } else { 
        super.setRowIndex(rowIndex % getPageSize()); 
       } 
      } 

      public List<Car> fetchLazyData(int first, int pageSize) { 
       System.out.println("Loading the lazy car data between " + first + " and " + (first + pageSize)); 
      List<Car> lazyCars = new ArrayList<Car>(); 

       for (int i = 0; i < pageSize; i++) { 
        int offset = i + first; 
        lazyCars.add(new Car("Model_" + offset, (int) (Math.random() * 60 + 1960), "Brand_" + offset, "Color_" + offset)); 
       } 
       return lazyCars; 
      } 
     }; 
     lazyDataModel.setRowCount(10000); 
    } 
} 

更新:我descovered我有綁定我的DataTable,並在我的豆我要調用loadLazyData()函數。

+1

你爲什麼要使用舊的beta版本? PrimeFaces 2.2已於2年多前完成。 – BalusC

+0

這是我將工作的項目的非功能性需求。顯然他們使用一個使用這個版本的primefaces的定製Tomcat。 –

+0

你使用'@ ManagedBean'註解嗎?或寫在你的faces-config文件(jsf1.2舊式/學校)? – danRod

回答

1

我發現我必須將我的DataTable與我的bean綁定,並且在我的bean上我必須調用loadLazyData()函數來通知表以加載它。

+0

你不需要綁定。請參閱https://stackoverflow.com/questions/11918834/primefaces-datatable-lazy-loading-and-commandbutton-per-row –

相關問題