[ https://issues.jboss.org/browse/RF-13706?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12984577#comment-12984577 ]
Michal Petrov commented on RF-13706: ------------------------------------ [~marcelkolsteren] it wasn't your fault :) Jenkins couldn't access the JBoss repo for some reason (there might have been a maintenance), the later builds are passing. > dequeued Ajax request not processed correctly if its source element has been > updated > ------------------------------------------------------------------------------------ > > Key: RF-13706 > URL: https://issues.jboss.org/browse/RF-13706 > Project: RichFaces > Issue Type: Bug > Security Level: Public(Everyone can see) > Components: core > Affects Versions: 4.3.7 > Reporter: Marcel Kolsteren > Assignee: Marcel Kolsteren > Fix For: 4.3.8, 4.5.0.Alpha3 > > Attachments: queuetest-javaee6.zip, queuetest.zip, > richfaces-core-4.3.8-SNAPSHOT.patch.zip > > Original Estimate: 1 hour > Remaining Estimate: 1 hour > > I found a problem in the RichFaces Ajax queuing mechanism, which can cause > all JavaScript execution to stop, leaving the end user with an unresponsive > page. > The problem occurs when a request in the queue rerenders an area that > includes the source element of the next request in the queue, but does not > include the form of that source element. When the next request is fetched > from the queue, JSF tries to find the correct form by climbing the DOM tree, > starting at the source element of the event. However, because the source > element has been rerendered, the path to its form is broken, and in that case > JSF falls back to the first form of the page (see JavaScript function getForm > that is called by jsf.ajax.request in jsf.js). If that form is not the form > belonging to the rerendered version of the element, nasty things will happen. > To illustrate this, I created a very simple Java EE 7 web application (see > attached Maven project) and deployed it in WildFly 8.1.0.Final. It contains a > page with one clickable link that rerenders itself when clicked: > {noformat} > <!DOCTYPE html> > <html xmlns="http://www.w3.org/1999/xhtml" > xmlns:h="http://java.sun.com/jsf/html" > xmlns:a4j="http://richfaces.org/a4j"> > <h:head/> > <h:body> > <form action="http://www.meandi.nl"/> > <h:form> > <a4j:commandLink action="#{richBean.waitThreeSeconds}" value="Click > Me" render="@this"/> > </h:form> > </h:body> > </html> > {noformat} > The method "waitThreeSeconds" does nothing but waiting for three seconds. > When the link is double clicked, you'll observe that the first click is > handled correctly, but that the second click results in an Ajax request > posted to the URL of the first form, leading to access denied errors (because > of cross domain scripting). The used RichFaces version is 4.3.7. > The problem can be fixed by changing the RichFaces JavaScript code, so that > after completion of an Ajax request, stale elements are removed from the > queue. I created a patch for RichFaces 4.3.7, and verified that it works (see > attachment). Another solution strategy would be to try to find the new DOM > element that corresponds to the stale source of the event, and fetch the form > from that element. My thought was that removing the stale request would be > better, because (1) it is kind of dangerous to process a user action on an > element that has already been replaced and (2) the element might have been > removed from the DOM tree by the previous rerender. -- 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