[ http://issues.apache.org/jira/browse/MYFACES-857?page=all ]

Paul Klaer updated MYFACES-857:
-------------------------------

    Attachment: MYFACES-857.patch

Its not the problem that the ids are generated after the 
JspStateManagerImp.restoreTreeStructure is called.

We had the same problem with duplicate ids. After some debugging I found the 
main problem. The problem is due to component bindings and session scope 
backing beans. If a binding is set and the view root changes then the old 
component, which has a binding to a backing bean and doesn't belong to the new 
viewRoot, is still added.

This components have already generated ids out of the previous rendering as 
they are not considered in the new rendering phase. The create component method 
doesn't assing to them new unique ids and the unique ids are broken if the 
amount of components changes. Thats why the checkForDuplicateIds method finds 
duplicate ids and raises this error.

There is a second effect on this bug. If you have value bindings and session 
scope backing beans and you reload the page while modifing the component values 
then the new component values are not set because the value binding sets the 
binding values which don't belong to the new viewRoot and the old values are 
shown again.

We solved the bug on the ApplicationImpl createComponent method. There we check 
each component if it belongs to the same viewRoot object on the context.

> Duplicate id in subview
> -----------------------
>
>          Key: MYFACES-857
>          URL: http://issues.apache.org/jira/browse/MYFACES-857
>      Project: MyFaces
>         Type: Bug
>   Components: Implementation
>     Versions: 1.1.1
>  Environment: Windows XP, Browser IE, Mozilla, Tomcat 5.0.28
>     Reporter: Juergen Melzer
>  Attachments: MYFACES-857.patch
>
> We use tiles and the myfaces integration. 
> But we get an exception:
> javax.faces.FacesException: cannot add component with id '_id13' and path : 
> {Component-Path : [Class: javax.faces.component.html.HtmlPanelGrid,Id: 
> _id13]} to its parent component. This might be a problem due to duplicate ids.
> at javax.faces.webapp.UIComponentTag.findComponent(UIComponentTag.java:401)
> at javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:219)
> I think the problem is that the id is generated after the 
> JspStateManagerImp.restoreTreeStructure is called. But inside the view there 
> is still the id above.
> A possible solution is to restore the field _uniqueIdCounter of the class 
> UIViewRoot to make correct counting...

-- 
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

Reply via email to