0 Replies Latest reply on Dec 16, 2010 4:45 AM by Adrien G

    Rich:tree remove a node

    Adrien G Newbie

      Hi everyone,

       

      I have a rich:tree which works with a recursiveTreeNodesAdaptor, and my question is how can I remove a selected node?

       

      My recursive bean:

       

      public class Organisation implements Serializable {
          private static final long serialVersionUID = 1L;
          
          private List<Organisation> children;
      
          private String type;
          private Item item;
      
          private Organisation parent;
      
          ...
      
          public void removeChild() {
              Organisation item = DynamicTree.getChildSelected(); // get the selected node as an Organisation
              if (item != null){
                  if(item.getParent() != null){ // if it's not the root node
                      
                      Organisation parent = item.parent;
      
                      List<Organisation> list_children = parent.getChildren();                
                      
                      int i = 0;
                      for(Organisation o : list_children){
                          if(organisationAreEquals(o, item)){ // if we found the child to delete
                              break;
                          }
                          i++;
                      }
                      
                      list_children.remove(i);
          }
      }
      

       

      But apparently we can't use "remove", I don't know why, I get this error:

       

      Caused by: java.lang.UnsupportedOperationException
          at java.util.Collections$UnmodifiableList.remove(Collections.java:1162)
          at prototype.dynamictree.model.Organisation.removeChild(Organisation.java:152)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
          at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
          at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
          at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
          ... 174 more
      

       

      Here is my xhtml code:

       

                   <rich:tree id="dynamicTree" ajaxSubmitSelection="true" ajaxSingle="true"
                          swichType="server"
                          nodeSelectListener="#{dynamicTree.processNodeSelection}"
                          rightClickSelection="true">
      
                          <rich:recursiveTreeNodesAdaptor roots="#{rootOrganisation}"
                              id="dynamicRecursiveTree"
                              switchType="server"
                              var="_rootOrganisation">
                              <rich:treeNode>
                                  <h:outputText value="MENU" />
      
                                  <rich:componentControl disableDefault="true"
                                      event="oncontextmenu" for="#{_rootOrganisation.type}ContextMenu"
                                      operation="show" />
                              </rich:treeNode>
      
                              <rich:recursiveTreeNodesAdaptor
                                  roots="#{_rootOrganisation.children}" var="_childOrganisation"
                                  nodes="#{_childOrganisation.children}">
      
                                  <rich:treeNode>
                                      <h:outputText value="#{_childOrganisation.item.name}" />
      
                                      <rich:componentControl disableDefault="true"
                                          event="oncontextmenu"
                                          for="#{_childOrganisation.type}ContextMenu" operation="show" />
                                  </rich:treeNode>
      
                              </rich:recursiveTreeNodesAdaptor>
                          </rich:recursiveTreeNodesAdaptor>
                      </rich:tree>
      

       

      Thank you for your help