4 Replies Latest reply on Oct 5, 2010 7:46 AM by Björn Konrad

    DropListener doesn't work when using <rich:extendedDataTable

    Ted Han Newbie

      Hi everyone:
      I have one drag-drop issue on <rich:extendedDataTable>, i'm using MyFaces 1.2.6, Facelet 1.1.14, Richfaces 3.3.0 here's my codes

      allUsers.xhtml:

      <!-- extendedDataTable -->
      <rich:extendedDataTable value="#{allUser.allUsersModel}" var="user" id="allUser" width="440px"
       rows="10" sortMode="#allUser.sortMode}" selectionMode="#{allUser.selectionMode}">
       <rich:column label="User Name" sortable="true" sortBy="#{user.userName}"
       filterBy="#{user.userName}" filterEvent="onkeyup">
       <f:facet name="header">
       <h:outputText value="User Name" />
       </f:facet>
       <rich:dragSupport dragIndicator=":indicator" dragType="user" dragValue="#{user}">
       <rich:dndParam name="label" value="#{user.userName}" />
       </rich:dragSupport>
       <h:outputText value="#{user.userName}" />
       </rich:column>
      </rich:extendedDataTable>
      <!-- drop zone -->
      <rich:panel styleClass="dropTargetPanel">
       <f:facet name="header">
       <h:outputText value="users" />
       </f:facet>
       <rich:dropSupport id="user" acceptedTypes="user" dropValue="user"
       dropListener="#{eventBean.processDrop}">
       </rich:dropSupport>
      </rich:panel>
      


      back bean
       private ExtendedTableDataModel<UserInterface> mAllUsersModel;
       private List<UserInterface> mAllUsersList = null;
      
       public ExtendedTableDataModel<UserInterface> getAllUsersModel()
       {
       mAllUsersList = UserManager.getInstance().getLatestUserInfo();
       mAllUsersModel = new ExtendedTableDataModel<UserInterface>(
       new DataProvider<UserInterface>()
       {
       private static final long serialVersionUID = 5054087821033164847L;
      
       public UserInterface getItemByKey(Object key)
       {
       for (UserInterface c : mAllUsersList)
       {
       if (key.equals(getKey(c)))
       {
       return c;
       }
       }
       return null;
       }
       public List<UserInterface> getItemsByRange(int firstRow, int endRow)
       {
       return mAllUsersList.subList(firstRow, endRow);
       }
       public Object getKey(UserInterface item)
       {
       return item.getUserCode();
       }
      
       public int getRowCount()
       {
       return mAllUsersList.size();
       }
       });
       }
      
       public List<UserInterface> getAllUsersList()
       {
       return mAllUsersList;
       }
      

      EventBean:
      public class EventBean implements DropListener {
      ...
      public void processDrop(DropEvent dropEvent) {
       Dropzone dropzone = (Dropzone) dropEvent.getComponent();
       }
      ...
      
      }


      extendedDataTable is value binded on mAllUsersModel which is a instance of ExtendedTableDataModel,
      when i drop object on drop-zone , method processDrop(DropEvent dropEvent) on EventBean havn't been called
      , if ExtendedTableDataModel is binded on mAllUsersList which is a List and use rich:dataTable , everyting goes well

      i'm really appreciate if anyone could tell me what's the problem, thanks