Description
When resetting the value of TreeElement attribute using TreeHtmlAttributeInfo, the AttributeRenderer still maintains the original attribute in a list and then it is applied to the markup of subsequent tree items. This is an issue between the TreeElement set of attributes and the AttributeRenderer.
For example, if an attribute is applied to a tree item when the item is selected (via a selectNode() action) and reset to a different value when a different node is selected, the nodes that follow will have the old attribute applied to them.
The TreeElement stores the attributes in a List. So trying to reset the attribute value in another operation using TreeElement.addAttribute() just adds a second entry to the list. For example, if a "style" attribute has already been set on a tree item and then addAttribute() is used to to change the value of the attribute on the node, it just adds it to the list. Now there's two attributes in the TreeElement attribute list with the same name ("style"). This makes the AttributeRenderer behave incorrectly, thinking that the first attribute exists and needs to be saved for other elements.
There is a workaround for this issue. A page flow developer could call the public TreeElement.getAttributeList() method and search through the list to see if it contains a TreeHtmlAttributeInfo with the same attribute name and then reset the value of that attribute.