[
https://issues.jboss.org/browse/RF-11093?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12984785#comment-12984785
]
Matej Novotny commented on RF-11093:
------------------------------------
[~bleathem] I am trying to verify this issue but I am not sure how to create a
reproducer/how to verify this.
Steps to reproduce aren't much help, I can't see what is meant by "visiting
component's tree" in commandLink.
Could you please give me some hint?
> UIDataAdaptor context variable backup broken (reentrance problem)
> -----------------------------------------------------------------
>
> Key: RF-11093
> URL: https://issues.jboss.org/browse/RF-11093
> Project: RichFaces
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: component-tables
> Affects Versions: 4.0.0.Final
> Environment: Windows XP, Java 6, Tomcat 6.0.24, Mojarra 2.0.2.
> Reporter: Yannick Valot
> Assignee: Yannick Valot
> Fix For: 4.5.0.Alpha3
>
> Attachments: UIDataAdaptor.java.patch
>
> Original Estimate: 1 hour
> Remaining Estimate: 1 hour
>
> I am encountering a reentrance problem with
> org.richfaces.component.UIDataAdaptor (using it as a dataTable).
> I need to perform a visit of the component tree while executing an action on
> a command link in one row of the same table.
> {code}
> <rich:dataTable value="#{listOfItems}" var="myItem" >
> ... some stuff here ...
> <commandLink here>
> ... some stuff here ...
> </rich:dataTable>
> {code}
> After the action on the command link has visited the component tree, myItem
> is no longer available in context.
> When the UIDataAdaptor sets or resets the "myItem" context variable, it backs
> up any previous value by calling captureOrigValue(FacesContext), and later
> restores it by calling restoreOrigValue(FacesContext), but it looks as if the
> visit backs the variable up twice (in a nested fashion), and it erases myItem
> between the two backups :
> - backup variable (old value is correctly backed up) (in
> visitTree(VisitContext visitContext, VisitCallback callback))
> - erase variable (setRowKey(facesContext, null) in same function)
> - erase variable (doVisitChildren(VisitContext context, boolean visitRows))
> - erase variable (visitTree(VisitContext visitContext, VisitCallback
> callback))
> - backup variable (erases backed up value) (walk(FacesContext faces,
> DataVisitor visitor, Object argument))
> - ...
> - restore value (restores null) (walk(FacesContext faces, DataVisitor
> visitor, Object argument))
> - restore value (restores null) (in visitTree(VisitContext visitContext,
> VisitCallback callback))
> etc.
> The problem can be solved by *stacking* backed up variables, instead of
> storing them in a simple attribute, to allow for any kind of reentrance.
> (I do not say that this is the best possible patch, but it has solved the
> problem for me).
--
This message was sent by Atlassian JIRA
(v6.2.6#6264)
_______________________________________________
richfaces-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/richfaces-issues