Details
Description
When components are dynamically added, the id modification performed by autoid can get out of sync:
In Mojarra StateManagementStrategyImpl:
// handle dynamic adds/removes
List<String> removeList = stateContext.getDynamicRemoves();
if (null != removeList && !removeList.isEmpty()) {
stateMap.put(CLIENTIDS_TO_REMOVE_NAME, removeList);
}
Map<String, ComponentStruct> addList = stateContext.getDynamicAdds();
if (null != addList && !addList.isEmpty()) {
List<Object> savedAddList = new ArrayList<Object>(addList.size());
for (ComponentStruct s : addList.values()) {
savedAddList.add(s.saveState(context));
}
stateMap.put(CLIENTIDS_TO_ADD_NAME, savedAddList.toArray());
}
"dynamic adds" are populated with the original IDs set prior to autoid modification. When autoid modifies these IDs, they do not match the value expected by state saving.
AbstractMenu.buildMenuFromModel() :
for(UIComponent kid : model.getSubmenus())
getChildren().add(kid);
called during encodeEnd for a variety of menu Renderers.