Hi, you shouldn't do target.addComponent(tree). You shouldo only call tree.upateTree() (or tree.updateTree(target), should do the same thing). Also you could consider using DefaultTreeModel.insertNodeInto instead of parent.addNode, as it automatically fires the listener for you.
Btw. I was thinking of some code I could actually run (so also the page with tree and the prebuit tree). Thus if this answer doesn't help your problem you can consider providing a quickstart project I can use to reproduce it. -Matej On Sat, Mar 15, 2008 at 12:57 AM, jeredm <[EMAIL PROTECTED]> wrote: > > Here is the code that pops up a modal for the user to enter a new option for > a > multiple choice question. When the modal returns I add the object it sends > back to > a node and then add the the node to the tree. Finally, I refresh the tree. > > The BaseTreeNode is an extended DefaultMutableTreeNode. The > model on my link tree is a set of BaseTreeNodes...so > tree = new MWLinkTree("tree", new DefaultTreeModel(rootBaseTreeNode)){...}; > > I don't know if this will be much more help. Keep in mind that I had 875 > nodes that were > in an expanded state during the tests. Thanks again for your help. > > > MWAjaxSubmitLink newButton = new MWAjaxSubmitLink("newButton", indicatorImg, > feedback){ > private static final long serialVersionUID = 1L; > > @Override > protected void onSubmit(AjaxRequestTarget target, Form form) { > ARGS.addParam("QuestionPk", option.getQuestionPk()); > modal.setContent(new Exam_QuestionsNewOptionPanel(modal.getContentId(), > ARGS)); > > modal.setWindowClosedCallback(new MWModalWindow.WindowClosedCallback(){ > private static final long serialVersionUID = 1L; > > public void onClose(AjaxRequestTarget target){ > QuestionOption newOption = > (QuestionOption)ARGS.getParam("NewQuestionOption"); > > // Check to see if the action was canceled > if(newOption != null){ > PageData passArgs = new PageData(); > passArgs.addParam("QuestionOption", newOption); > > TreeNodeFactory factory = TreeNodeFactory.getObject(); > BaseTreeNode newNode = factory.buildReplaceNode(treePanel, > StringUtil.truncateForList(newOption.getShortDesc(), 18), "QuestionOption", > newOption, passArgs, "Exam_QuestionsOptionPanel", "swapPanel", > TreeNodeState.NONE); > > // ADD NEW NODE HERE -------------------------------- > // the node is the selected node > ((BaseTreeNode)node.getParent()).add(newNode); > > // REFRESH THE TREE HERE ----------------------------- > > DefaultTreeModel model = (DefaultTreeModel)tree.getModelObject(); > int[] changes = new > int[]{model.getIndexOfChild(newNode.getParent(), newNode)}; > model.nodesWereInserted((TreeNode)newNode.getParent(), changes); > > target.addComponent(tree); > } > } > }); > > modal.show(target); > > target.appendJavascript("document.getElementById('answerDesc').select()"); > target.addComponent(this.feedback); > } > }; > form.add(newButton); > > > > Matej Knopp-2 wrote: > > > > Sorry, I meant the updateTree method. Anyway, 23 seconds seems quite a > > lot to me. Any chance you could submit a stripped down example I can > > take a look at? > > > > -Matej > > > > On Fri, Mar 14, 2008 at 6:01 PM, jeredm <[EMAIL PROTECTED]> > > wrote: > >> > >> I added the following code and it correctly refreshed the node: > >> > >> DefaultTreeModel model = (DefaultTreeModel)tree.getModelObject(); > >> int[] changes = new int[]{model.getIndexOfChild(parentNode, newNode)}; > >> model.nodesWereInserted((TreeNode)parentNode, changes); > >> > >> The time difference seemed close to invalidateAll(). invalidateAll() > >> took > >> about 24 seconds while the new method took 23 seconds. It is likely > >> that > >> they are the same speed as I was counting in my head and only ran the > >> test > >> once. The test was with 875 nodes open in the tree...so that is about 1 > >> second for every 35 nodes. I think a typical user will have about 90 > >> nodes > >> in the tree at the most and 30 on average, so between 2.5 and 1 > >> second(s) to > >> wait for the node to display after clicking save. The speed I am seeing > >> may > >> just be the time it takes to render in the browser. If that is the > >> case, > >> then I am fine with it. I just want to make sure I am correctly > >> updating > >> the tree and not making it work harder than it needs to. > >> > >> I also tried tree.updateTree() after I added the node and found that it > >> did > >> not solve the refresh problem. When you said call update() on the model > >> what function should I be calling (I don't see update in the API)? > >> > >> Thanks for your help! > >> > >> > >> > >> > >> Matej Knopp-2 wrote: > >> > > >> > Make sure your tree model fires the appropriate events when your tree > >> > is modified. The Tree implementation should properly update the > >> > changed portions of tree (assuming you call the update() method). > >> > > >> > -Matej > >> > > >> > On Fri, Mar 14, 2008 at 1:27 AM, jeredm <[EMAIL PROTECTED]> > >> > wrote: > >> >> > >> >> I have a LinkTree where am adding new nodes via AJAX where the node > >> is > >> >> not > >> >> visually refreshing until I call myLinkTree.invalidateAll();. The > >> >> problem > >> >> is that the tree refresh takes too long when I have a bunch of nodes > >> >> displayed. AbstractTree.invalidateAll() appears to "redraw" the > >> whole > >> >> tree, > >> >> but I only need to "redraw" the single node (I may be wrong on this > >> and > >> >> it > >> >> may be working exactly as I need it to, but it is slow). > >> >> > >> >> My basic setup is a tree on the left that dynamically swaps out > >> panels > >> >> via > >> >> AJAX on the right based on the node selected. The tree itself only > >> >> starts > >> >> with the root and first children. All first children load their > >> child > >> >> nodes > >> >> via an AJAX call on expand. These nodes will correctly refresh as > >> the > >> >> nodes > >> >> are added and then the parent is expanded. I cannot collapse and > >> >> re-expand > >> >> the parent node in this case as expanding a node would cause the > >> tree to > >> >> close nodes the user has already opened. What I need is to be able > >> to > >> >> insert a node like so... > >> >> > >> >> - My Root > >> >> |--First Child > >> >> |-- First Grandchild > >> >> |-- NEW NODE > >> >> |-- Last Grandchild > >> >> > >> >> I need the First Grandchild and Last Grandchild to already be > >> expanded > >> >> and > >> >> displaying before I add NEW NODE. > >> >> > >> >> -- > >> >> View this message in context: > >> >> http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16041813.html > >> >> Sent from the Wicket - User mailing list archive at Nabble.com. > >> >> > >> >> > >> >> > >> --------------------------------------------------------------------- > >> >> To unsubscribe, e-mail: [EMAIL PROTECTED] > >> >> For additional commands, e-mail: [EMAIL PROTECTED] > >> >> > >> >> > >> > > >> > > >> > > >> > -- > >> > Resizable and reorderable grid components. > >> > http://www.inmethod.com > >> > > >> > --------------------------------------------------------------------- > >> > To unsubscribe, e-mail: [EMAIL PROTECTED] > >> > For additional commands, e-mail: [EMAIL PROTECTED] > >> > > >> > > >> > > >> > >> -- > >> View this message in context: > >> http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16048613.html > >> > >> > >> Sent from the Wicket - User mailing list archive at Nabble.com. > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [EMAIL PROTECTED] > >> For additional commands, e-mail: [EMAIL PROTECTED] > >> > >> > > > > > > > > -- > > Resizable and reorderable grid components. > > http://www.inmethod.com > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > -- > View this message in context: > http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16062572.html > > > Sent from the Wicket - User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Resizable and reorderable grid components. http://www.inmethod.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]