[
https://issues.apache.org/jira/browse/WICKET-3449?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13015878#comment-13015878
]
Sergey Plevko edited comment on WICKET-3449 at 4/5/11 11:46 AM:
----------------------------------------------------------------
Martin, if you go back to WICKET-2886, you'll see that the problem with
junction link was not only with ROOT. There was the fix for that issue.
Unfortunately, that fix doesn't cover current issue. You propose to use
nodeChanged() method, but it looks like a hot fix. Sure, this way works, but
it's rather strange to use nodeChanged() only for the case when you add first
child to the root. I don't doubt this issue must be fixed internally in the
wicket framework.
I suppose the problem is in
AbstractTree.java
public final void treeNodesInserted(TreeModelEvent e)
{
...
// parentNode now has children for the first time, so we may need to
invalidate
// grandparent so that parentNode's junctionLink gets rebuilt with a
plus/minus link
Object grandparentNode = getParentNode(parentNode);
// not invalidating if the grandparent is a not presented root
if (!(getParentNode(grandparentNode) == null && isRootLess()))
{
invalidateNodeWithChildren(grandparentNode);
}
...
}
In our case 'parentNode' is ROOT and 'grandparentNode' is null. So
invalidateNodeWithChildren() does nothing.
was (Author: lotos):
Martin, if you go back to WICKET-2886, you'll see that the problem with
junction link was not only with ROOT. There was the fix for that issue.
Unfortunately, that fix doesn't cover current issue. You propose to use
''nodeChanged()'' method, but it looks like a hot fix. Sure, this way works,
but it's rather strange to use _nodeChanged()_ only for the case when you add
first child to the root. I don't doubt this issue must be fixed internally in
the wicket framework.
I suppose the problem is in
{code:title=AbstractTree.java|borderStyle=solid}
public final void treeNodesInserted(TreeModelEvent e)
{
...
// parentNode now has children for the first time, so we may need to
invalidate
// grandparent so that parentNode's junctionLink gets rebuilt with a
plus/minus link
Object grandparentNode = getParentNode(parentNode);
// not invalidating if the grandparent is a not presented root
if (!(getParentNode(grandparentNode) == null && isRootLess()))
{
invalidateNodeWithChildren(grandparentNode);
}
...
}
{code}
In our case *parentNode* is ROOT and *grandparentNode* is _null_. So
_invalidateNodeWithChildren()_ does nothing.
> Tree doesn't update correctly
> -----------------------------
>
> Key: WICKET-3449
> URL: https://issues.apache.org/jira/browse/WICKET-3449
> Project: Wicket
> Issue Type: Bug
> Components: wicket-core
> Affects Versions: 1.4.15
> Environment: tomcat 6.0.26, win 7
> Reporter: Sergey Plevko
> Assignee: Martin Grigorov
> Attachments: 3.jpg, quickStart.zip
>
>
> When we add a first child to the root node junction link (near the root)
> doesn't appear in the tree.
> This bug easily can be reproduced with the next piece of code.
> TestPage.html
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
> <body>
> <table>
> <tr> <td> <div wicket:id="tree"></div> </td>
> </tr>
> <tr> <td> <input type="submit" wicket:id="addChild"
> class="btn btnStd" /> </td> </tr>
> </table>
> </body>
> </html>
> TestPage.java
> public class TestPage extends WebPage {
> public TestPage() {
> final DefaultMutableTreeNode root = new
> DefaultMutableTreeNode("root");
> final DefaultTreeModel treeModel = new DefaultTreeModel(root);
> final BaseTree tree = new LinkTree("tree", treeModel);
> add(tree);
> tree.getTreeState().expandNode(root);
> AjaxLink addButton = new AjaxLink("addChild") {
> public void onClick(AjaxRequestTarget ajaxRequestTarget) {
> DefaultMutableTreeNode child = new
> DefaultMutableTreeNode("child");
> root.add(child); // it doesn't matter how we add this child
> treeModel.insertNodeInto(child, root, 0);
> tree.updateTree(ajaxRequestTarget);
> }
> };
> add(addButton);
> }
> }
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira