2012-10-04 4 views
3

Sur datatable, j'ai activé la case à cocher de sélection multiple. Et il y a bouton soumettre, sur actionlistener, je reçois des enregistrements en double en tant qu'éléments sélectionnés. Par exemple, sur la première page, il y a 5 enregistrements et le nombre total d'enregistrements est 10, puis les enregistrements de la première page sont dupliqués deux fois et aboutissent à 10 enregistrements, ce qui devrait être limité à 5 enregistrements.Primefaces datatable mode de sélection multiple - chargement de charge paresseux

Ce qui suit est l'extrait de code:

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

code managé 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"); 
    } 

Répondre

0

Peut-être pas la solution, mais vous n'avez pas besoin d'utiliser l'événement pour obtenir les éléments sélectionnés , Je suppose que vous avez ceci dans votre haricot géré:

private Address[] selectedItems; 

Vous devez également mettre selectionMode = « multiple » sur la table de données et non sur la colonne comme vous faites, comme ceci:

<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 !"> 

Alors, pas besoin d'ajouter un ActionEvent, les entités sélectionnées seront mis sur votre Géré automatiquement. Lorsque vous faites un appel de soumission (ou un appel ajax), vous devriez obtenir le nombre correct d'entités sélectionnées.

Questions connexes