2012-10-04 35 views
3

在數據表上,我啓用了多選擇複選框。 並且在actionlistener上有提交按鈕,我將重複的記錄作爲選定的項目。Primefaces數據表多選模式 - 延遲加載獲取

例如,在第一頁上它是5條記錄,總記錄數是10條,那麼第一頁記錄會被複制兩次,併產生10條記錄,這應該被限制爲5條記錄。

以下是代碼片段:

<p:dataTable id="sampleDataTable" var="_task" value="#{myBean.lazyModelTasks}" 
      styleClass="dataTable" paginator="true" paginatorTemplate="{PageLinks}" 
      paginatorPosition="bottom" rows="5" widgetVar="dataTab"    
      paginatorAlwaysVisible="true" rowIndexVar="rowIndex" 
      lazy="true" selection="#{myBean.selectedItems}" 
      emptyMessage="No Search Results found !"> 

    <p:column selectionMode="multiple" style="width:15px;"> 
     <f:facet name="header"> 
     <h:outputText value="Sno" /> 
     </f:facet> 
    </p:column> 
</p:dataTable> 

<p:commandButton id="submit" value="Select" update="#{rerenderid}" 
    actionListener="#{myBean.addSelectedItems}" oncomplete="#{onlinkclick}"> 
    <f:attribute name="selectedItems" value="#{myBean.selectedItems}"/> 
</p:commandButton> 

Managed Bean的代碼:

public void addExternalRecipients(ActionEvent event) { 
     //THIS GIVES ME 10 RECORDS, THOUGH THERE ARE ONLY 5 RECORDS AT THAT INSTANCE 
     this.selectedItems = (Address[]) 
         event.getComponent().getAttributes().get("selectedItems"); 
    } 

回答

0

也許不是解決辦法,但你並不需要使用事件獲得所選項目,我想你在你的託管豆中有這個:

private Address[] selectedItems; 

你也應該把的SelectionMode =「多」的數據表,而不是在列像你正在做的,是這樣的:

<p:dataTable id="sampleDataTable" var="_task" value="#{myBean.lazyModelTasks}" 
      styleClass="dataTable" paginator="true" 
      paginatorTemplate="{PageLinks}" 
      paginatorPosition="bottom" rows="5" widgetVar="dataTab"    
      paginatorAlwaysVisible="true" rowIndexVar="rowIndex" 
      lazy="true" selection="#{myBean.selectedItems}" 
      selectionMode="multiple" <!--to make multiple rows selected --> 
      emptyMessage="No Search Results found !"> 

之後,無需再添加一個ActionEvent,所選擇的實體將在設置你的自動管理bean。當您進行提交(或ajax調用)時,您應該得到正確數量的選定實體。