Selection remains after removing collapsed node in the tree.
------------------------------------------------------------

                 Key: WICKET-3453
                 URL: https://issues.apache.org/jira/browse/WICKET-3453
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 1.4.14
         Environment: tomcat  6.0.26, win 7
            Reporter: Sergey Plevko
            Assignee: Martin Grigorov


If we fire 'node removed event' in the tree, it deselects only node which is 
currently shown (not under collapsed parent).

There are two use cases which show correct and incorrect behavior.

Step 1: expand ROOT
Step 2: expand SUBTREE
Step 3: select LEAF
Step 4: press 'Print Selection'
Result 4: 'Selected Node: LEAF'
Step 5: press 'Delete SUBTREE'
Step 6: press 'Print Selection'
Result 6: 'Selected Node: --NO SELECTION--'

This behavior is correct.

Step 1: expand ROOT
Step 2: expand SUBTREE
Step 3: select LEAF
Step 4: press 'Print Selection'
Result 4: 'Selected Node: LEAF'
-------------------------------------
Step 5: collapse SUBTREE
------------------------------------- 
Step 6: press 'Delete SUBTREE'
Step 7: press 'Print Selection'
Result 7: 'Selected Node: LEAF'

'LEAF' is still selected, but there is no such node in the tree model.

Use the code below to reproduce the bug.

Test.html

<html>
<body>
    <div wicket:id="tree"></div>

    <input type="button" wicket:id="printSelection" value="Print Selection">
    <input type="button" wicket:id="delete" value="Delete 'SUBTREE'">
    <br>Selected Node:
    <b><span wicket:id="selection"></span></b>
</body>
</html>

Test.java

public class Test extends WebPage {
    private DefaultMutableTreeNode subTree;

    public Test() {
        final LinkTree tree = new LinkTree("tree", createTreeModel());
        add(tree);

        final Label selection = new Label("selection");

        add(new AjaxLink("printSelection") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                Collection<Object> selectedNodes = 
tree.getTreeState().getSelectedNodes();
                String selectionString = "--NO SELECTION--";
                if (selectedNodes.size() > 0) {
                    selectionString = 
selectedNodes.iterator().next().toString();
                }
                selection.setDefaultModel(new Model<String>(selectionString));
                target.addComponent(selection);
            }
        });

        add(new AjaxLink("delete") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                DefaultTreeModel treeModel = (DefaultTreeModel) 
tree.getModelObject();
                if(subTree != null) {
                    treeModel.removeNodeFromParent(subTree);
                    subTree = null;
                }
                tree.updateTree();
            }
        });

        selection.setOutputMarkupId(true);
        add(selection);
    }

    protected TreeModel createTreeModel() {
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("ROOT");
        subTree = new DefaultMutableTreeNode("SUBTREE");
        DefaultMutableTreeNode leaf = new DefaultMutableTreeNode("LEAF");
        rootNode.add(subTree);
        subTree.add(leaf);
        return new DefaultTreeModel(rootNode);
    }
}

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to