Primefaces数据表多选模式 - 延迟加载

时间:2012-10-04 09:11:35

标签: jsf primefaces

在数据表上,我启用了多个选择复选框。 还有提交按钮,在actionlistener上,我将重复记录作为选定项目。

例如,在第一页上它是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>

托管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"); 
   }

1 个答案:

答案 0 :(得分: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调用)时,您应该获得正确数量的选定实体。