Children out of order in ChildArrayList when re-added to different parent
-------------------------------------------------------------------------
Key: ADFFACES-41
URL: http://issues.apache.org/jira/browse/ADFFACES-41
Project: MyFaces ADF-Faces
Type: Bug
Environment: All
Reporter: John Fan
Priority: Minor
Here is the code in the add(int index, Object element) method in
org.apache.myfaces.adf.component.ChildArrayList class:
if (child.getParent() != null)
{
index = __removeFromParent(child, index);
}
child.setParent(_parent);
super.add(index, child);
What it is trying to do is to add a new child (the child variable in the code)
to this ChildArrayList, and automatically detach the new child from its old
parent, if exists, by calling __removeFromParent.
If you look into the __removeFromParent() method, you can find out that this
chunk of code assumes that the old parent is identical to the new parent it is
being added under, and __removeFromParent returns an adjusted index value
according to this assumption. This assumption is not always right and this is
causing problems.
One way of fixing this is:
Object oldParent = child.getParent();
if (oldParent != null)
{
int adjustedIndex = __removeFromParent(child, index);
//Only adjust the index when the child is re-added to the same parent
if (oldParent == _parent)
{
index = adjustedIndex;
}
}
child.setParent(_parent);
super.add(index, child);
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira