This exception is a long-known issue with the tree2 implementation.
The problem is the way how the state of the nodes (expanded or
collapsed) is stored.
Currently the nodes of each depth are numbered every time the tree is
displayed. When the state of the tree is saved, this number and the
state of the node are stored.
On restoring the state, the nodes are toggled (expanded or collapsed)
according to the current number they get and the state which was saved
for this number.
When you insert a leaf at a positon where a expanded node has formerly
been you'll run into this exception because the new leaf gets the id of
the former expanded node - and when the state is applied then this leaf
is to be expanded.
The solution would be that every node gets a unique id which is stored
in the node. After restoring the state all new nodes would be ignored.
But implementing this changes some other stuff some people might use...
I'm currently working on a fix because I got the same problem as you do.
- Marius
James Ellis wrote:
I am trying to use the tree2 component that ships with MyFaces Tomahawk
but I keep running into issues. I've been trying to debug this for two
days now.
I have gotten the tree2.jsp example up and running but it breaks when i
try to customize it. It keeps giving me the error:
Encountered a node [0:0:1] + with an illogical state. Node is expanded
but it is also considered a leaf (a leaf cannot be considered expanded.
The code works fine if I my TreeBacker.getTreeData() looks like this:
public TreeNode getTreeData()
{
TreeNode treeData = new TreeNodeBase("foo-folder", "Inbox", false);
TreeNodeBase personNode = new TreeNodeBase("foo-folder", "Frank
Foo", false);
personNode.getChildren().add(new TreeNodeBase("document", "C050003",
true));
treeData.getChildren().add(personNode);
return treeData;
}
However if I add one more node beneath that (which is explicitly marked
as a leaf) it bombs out on me with the error mentioned above:
public TreeNode getTreeData()
{
TreeNode treeData = new TreeNodeBase("foo-folder", "Inbox", false);
TreeNodeBase personNode = new TreeNodeBase("foo-folder", "Frank
Foo", false);
personNode.getChildren().add(new TreeNodeBase("document", "C050003",
true));
personNode.getChildren().add(new TreeNodeBase("document",
"22C050003", true));
treeData.getChildren().add(personNode);
return treeData;
}
All I want is a folder structure that looks like this:
Parent (expandable folder)
-----Child (not expandable, just a link)
-----Child (not expandable, just a link)
This can't be too hard. Any help appreciated.
Jim