[ https://issues.jboss.org/browse/RF-11093?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12985925#comment-12985925 ]
Juraj Húska commented on RF-11093: ---------------------------------- Verified on this branch: https://github.com/richfaces/richfaces-qa/tree/RF-11093 * [facelet|https://github.com/richfaces/richfaces-qa/blob/RF-11093/metamer/application/src/main/webapp/components/a4jRepeat/RF-11093.xhtml] * [bean|https://github.com/richfaces/richfaces-qa/blob/RF-11093/metamer/application/src/main/java/org/richfaces/tests/metamer/bean/issues/RF11093.java] With the older versions of RF the {{var}} value is {{null}}, with {{4.5.Alpha3}} correct value is logged. Verified. Closing. > 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: Juraj Húska > 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 richfaces-issues@lists.jboss.org https://lists.jboss.org/mailman/listinfo/richfaces-issues