pixotec wrote:
> 
> I want to use LinkTree to represent a very very large hierarchy (the
> loading of the whole thing is expensive...).
> Is there an AJAX way of loading the children of a node just when clicking
> on the "plus-icon" for expanding?
> 

You may try my code below which seems to work, even though it's not using
ajax:

<pre>
public class TreePage extends WebPage {
        private DefaultTreeModel treeModel;
        private TreeChildrenProvider provider;

        private class MyTreeNode extends DefaultMutableTreeNode {
                public MyTreeNode(String nodeName) {
                        super(nodeName);
                }
                public String getName() {
                        return (String) getUserObject();
                }
                public boolean isLeaf() {
                        return provider.getChildren(getName()).isEmpty();
                }
        }

        public TreePage() {
                provider = makeMockProvider();
                MyTreeNode a = new MyTreeNode("a");
                treeModel = new DefaultTreeModel(a);
                LinkTree tree = new LinkTree("tree", new PropertyModel(this,
                                "treeModel"));
                add(tree);
                ITreeState treeState = tree.getTreeState();
                treeState.collapseAll();
                treeState.addTreeStateListener(new ITreeStateListener() {
                        public void nodeUnselected(TreeNode node) {
                        }
                        public void nodeSelected(TreeNode node) {
                        }
                        public void nodeExpanded(TreeNode node) {
                                if (!node.isLeaf() && node.getChildCount() == 
0) {
                                        MyTreeNode myTreeNode = ((MyTreeNode) 
node);
                                        for (String childName : 
provider.getChildren(myTreeNode
                                                        .getName())) {
                                                myTreeNode.add(new 
MyTreeNode(childName));
                                        }
                                }
                        }
                        public void nodeCollapsed(TreeNode node) {
                        }
                        public void allNodesExpanded() {
                        }
                        public void allNodesCollapsed() {
                        }
                });
        }
        private TreeChildrenProvider makeMockProvider() {
                return new TreeChildrenProvider() {
                        public List<String> getChildren(String nodeName) {
                                if (nodeName.equals("a")) {
                                        return Arrays.asList(new String[] { 
"b", "c" });
                                }
                                if (nodeName.equals("b")) {
                                        return Arrays.asList(new String[] { 
"d", "e" });
                                }
                                return Collections.EMPTY_LIST;
                        }
                };
        }
        public DefaultTreeModel getTreeModel() {
                return treeModel;
        }
}

public interface TreeChildrenProvider {
        List<String> getChildren(String nodeName);
}
</pre>
-- 
View this message in context: 
http://www.nabble.com/LinkTree-lazy-loading-possible--tf4493231.html#a12842551
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to