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]