On Jul 12, 2011, at 5:53 PM, Chuck Hill wrote: On Jul 12, 2011, at 2:45 PM, Ricardo J. Parada wrote:
On Jul 12, 2011, at 4:52 PM, Chuck Hill wrote:
Hi Ricardo,
On Jul 12, 2011, at 1:35 PM, Ricardo J. Parada wrote:
Does anybody have an idea what could be causing this problem? The user clicks on an AjaxModalDialogOpener which opens the dialog. Then the user does a whole bunch of stuff in the dialog that involves many clicks
Does it still happen if they don't make so many clicks?
If they make a few clicks then it works okay.
then finally clicks a DONE link to close the dialog.
Are all of these links and clicks Ajax actions?
Yes, they are clicking on links generated by AjaxSubmitButton components to be exact. :-)
And you are certain that there are no /wo/ or /wa/ requests mixed in here?
I set this property in my Properties.dev:
log4j.logger.er.extensions.ERXApplication.RequestHandling=DEBUG
and then I looked at all the uri's of the requests coming in. They have /ajax/ in there and when the dialog first comes up I see a few /_wr_/ and I guess the browser caches those since I don't see requests for those anymore on subsequent requests after the dialog is displayed.
All the requests for the "many clicks" I mentioned have /ajax/ in them. I don't see any /wo/ requests mixed in.
Also I set a breakpoint in ERXAjaxSession.java at the only place it calls super.savePage() where I assume the current page would be saved but I never hit the breakpoint. I would think that regular component requests would be generating new context IDs and therefore saving the page in the cache for those context IDs. But I don't see the page getting saved. :-/
The dialog has a closeUpdateContainerID bound with the id of an ajax update container to refresh, which it does refresh upon closing the dialog. But then the user clicks on a link on the page that is outside the refreshed AjaxUpdateContainer and the app displays the error "You backtracked too far. The application backtracking limit of 30 has been exceeded."
Ajax links or regular component actions links? I do what seems to be the same thing (except maybe the "does a whole bunch of stuff in the dialog") and have not had any problems.
They are regular component action links. The context ID for which the page is being restored is 22.
The original URL is 21?
Well, I just put in there a <wo:link string="test" action=""/> and by inspecting that link after I close the ajax modal dialog and the update container refreshes the href for the link is:
and clicking that generates the "You backtracked too far" error.
The key to tracking this down is to know if it is the Ajax or the regular page cache that is missing the component.
I'm stepping through the restorePageForContextID() in ERXAjaxSession.java but I'm not sure what to look for.
Sorry, I just meant if the URL that caused the error was a /ajax/ or /wo/ URL. It sounds like a /wo/ URL so that suggests to me that something in your dialog is generating /wo/ or /wa/ requests that are pushing the page out of the standard page cache.
I did not see any /wo/ nor /wa/ requests. They are all /ajax/ requests.
Maybe I'll try to create a test Wonder app with an ajax modal dialog with a single ajax link in it that displays the current time when clicked... Then I can click it many many times. Then close the dialog and then click on a link on the page afterwards to see if I can reproduce.
Chuck -- Chuck Hill Senior Consultant / VP Development Come to WOWODC this July for unparalleled WO learning opportunities and real peer to peer problem solving! Network, socialize, and enjoy a great cosmopolitan city. See you there! http://www.wocommunity.org/wowodc11/
|