1 Reply Latest reply on Jul 7, 2008 4:05 AM by Ilya Shaikovsky Branched to a new discussion.

    how can we select all current page items in rich:dataTable b

    li jun Newbie

      Hi:
      Now I use rich:dataTable to show list data of type List. I add one column of h:selectBooleanCheckbox for user to choose muti items in the table . You can press a button to submit the selection at the same time. I add a boolean property to the WarningItem to get what items are selected where user click the submit button. It works.

      For the convenience of the users, I want to add another h:selectBooleanCheckbox to control all other h:selectBooleanCheckbox in the rich:dataTable of the current page. However, I can not get the object list from rich:dataTable of the current page! So the problem is , I click that special h:selectBooleanCheckbox and make all items in the rich:dataTable selected ,including the items in other pages.

      <h:form id="warningListForm" rendered="#{not empty warningQuery.resultList}">
       <rich:dataTable id="warningList" rows="3"
       onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
       onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
       cellpadding="0" cellspacing="0" var="row" sortMode="single"
       value="#{resultList}">
      
       <rich:column>
       <f:facet name="header">
       <h:selectBooleanCheckbox value="#{warningQuery.selectall}">Select All
       <a:support event="onclick" actionListener="#{warningQuery.allSelect('resultList')}"
       reRender="ckSelect" />
       </h:selectBooleanCheckbox>
       </f:facet>
       <h:selectBooleanCheckbox id="ckSelect" value="#{row.selected}"/>
       </rich:column>
       <rich:column sortBy="#{row.oldId}" rendered="#{user.hasField('oldid')}">
       <f:facet name="header">ID</f:facet>
       #{row.oldId}
       </rich:column>
       </rich:dataTable>
       <h:commandButton action="#{warningQuery.updateStatus('1')}"
       value="action1"/>
       <h:commandButton action="#{warningQuery.updateStatus('3')}"
       value="action2"/>
       <br/>
       <rich:datascroller id="warningListScroller" align="left" for="warningList" maxPages="20" fastControls="hide">
       <f:facet name="next">
       <h:outputText value=">"/>
       </f:facet>
       <f:facet name="previous">
       <h:outputText value="<"/>
       </f:facet>
       </rich:datascroller>
      </h:form>
      


      @Stateful
      @Scope(ScopeType.SESSION)
      @Name("warningQuery")
      @SuppressWarnings(value={"unchecked","serial"})
      public class WarningQueryBean implements WarningQuery {
      
       @DataModel
       private List<WarningItem> resultList;
      
       public void updateStatus(String status) {
       log.info("status="+status);
       log.info("status="+resultList.size());
       if(resultList!=null){
       for(WarningItem wi:resultList)
       {
       if(wi.isSelected()==true){
       wi.setSelected(false);
       wi.setStatus(status);
       em.merge(wi);
       }
       }
       }
       selectall = false;
       }
      
      public void allSelect(String dataName){
       Object o=Contexts.lookupInStatefulContexts(dataName);
       if(o!=null&&o instanceof javax.faces.model.DataModel){
       javax.faces.model.DataModel dm=(javax.faces.model.DataModel)o;
       List<WarningItem> temList=(List<WarningItem>)dm.getWrappedData();
       if(temList!=null&&temList.size()>0){
       for(WarningItem wrap:temList){ // MAKE ALL ITEMS SELCTED,INCLUDING THE ONES IN OTHER PAGES
       wrap.setSelected(selectall);
       log.info("wrap="+wrap.getOldId());
       }
       }
       }
      }
      
      

      @Entity
      @Table(name = "warning_item")
      @SuppressWarnings(value={"serial"})
      public class WarningItem implements Serializable{
       @Logger
       Log log;
      
       Integer id;
       Integer oldId;
       boolean selected; //FOR THE h:selectBooleanCheckbox