4

データテーブルで、複数選択チェックボックスを有効にしました。また、送信ボタンがあり、actionlistener で、選択した項目として重複したレコードを取得しています。

たとえば、最初のページに 5 つのレコードがあり、合計レコード数が 10 の場合、最初のページのレコードが 2 回複製されて 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>

マネージド 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"); 
   }
4

1 に答える 1

0

解決策ではないかもしれませんが、選択したアイテムを取得するためにイベントを使用する必要はありません。マネージド Bean にこれがあると仮定します。

private Address[] selectedItems;

次のように、selectionMode="multiple" を列ではなくデータテーブルに配置する必要があります。

<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 呼び出し) を行うと、選択されたエンティティの正しい数を取得する必要があります。

于 2012-10-04T17:48:13.433 に答える