Hi Dan, I made an output of the PageIDs and got the following result:
When I reload Page1 in Tab2, the page id is different from the page id of Page2 in Tab1. Additionally, this reload of Tab1 while making a reload of Tab2 occurs in any browser. Tested it with Opera, Firefox and IE. Andre On Wed, 29 Feb 2012 20:46:22 -0800 Dan Retzlaff <dretzl...@gmail.com> wrote: > I reproduced part of your setup with the attached quickstart whose homepage > updates a single label with an AjaxSelfUpdatingTimerBehavior. Reloading a > page in a second tab (including its version number in the URL) causes > subsequent requests to the first tab to be considered "stale" based on a > page render count. This stops the AJAX updates. So Andre, when you load > Page1 in Tab2, does your request include the page ID from Tab1? > > If this isn't the case, then please share a quickstart of your own. Despite > your detailed description I'm not sure I'm reproducing your steps exactly. > > Regarding multiple constructor calls, are you using Chrome 17 or greater? > It introduces some funky prerendering business that can cause multiple > requests/constructions when you'd otherwise expect one. I just learned this > today. Typing "localhost:8080" into address bar is enough to make the > request, even without hitting enter. Hitting enter causes another request > to be made, but it appears it is the first response that is rendered (based > on the page ID in the URL). Interesting. > http://code.google.com/chrome/whitepapers/prerender.html > > Dan > > 2012/2/29 Andre Schütz <andre-p...@gmx.de> > > > Hi, > > > > I could identify the cause of the problem, but still have no > > solution. > > > > I set some breakpoints and made some output messages to trace > > the system. The following thinks happened: > > > > (1) > > I submit a search in Tab1. The search word will be passed as > > Page Parameter to Page2 in Tab1. While Tab1 is showing the loading > > animation with it AjaxSelfUpdatingTimerBehavior, I submit a second > > search in Tab2. Tab2 switches to its Page2 and the loading animation > > stops in both Tabs. > > > > Reason: > > --> The constructors of Page2 is called twice on the two Tabs. > > > > As diagram: > > 01.) Tab1: Page1 submit search > > 02.) Tab1: Page2 (Page id = 14) calls its constructor and adds a PanelA > > 03.) Tab1: shows loading animation with its AjaxSelfUpdatingTimerBehavior > > at PanelA > > 04.) Tab2: Page1 submit search > > 05.) Tab2: Page2 (Page id = 16) calls its constructor and adds a PanelA > > 06.) Tab2: shows loading animation with its AjaxSelfUpdatingTimerBehavior > > at PanelA > > 07.) Tab1: Page2 (Page id = 17) calls its constructor > > 08.) Tab1: does not update anymore > > 09.) Tab2: Page2 (Page id = 18) calls its constructor > > 10.) Tab2: does not update anymore > > > > I do nothing from the beginning of step 7 and do not know why the > > constructor > > is called again. > > > > (2) > > The same odd behavior happens, when I do the following. I submit a search > > in Tab1 from its Page1. While the loading animation is shown, I reload the > > Page1 in Tab2. The constructor of Page2 in Tab1 is called again and the > > Page2 in Tab1 stops its update progress. > > > > As diagram: > > 01.) Tab1: Page1 submit search > > 02.) Tab1: Page2 (Page id = 22) calls its constructor and adds a PanelA > > 03.) Tab1: shows loading animation with its AjaxSelfUpdatingTimerBehavior > > at PanelA > > 04.) Tab2: Reload any Page > > 05.) Tab1: Page2 (Page id = 23) calls its constructor > > 06.) Tab1: does not update anymore > > > > > > I really can't explain to myself, why the constructor is called again. But > > I think > > that this second call in the individual Tabs is crashing my application. > > Any ideas about this odd behavior? > > > > Thank in advance, > > Andre > > > > > > On Wed, 29 Feb 2012 10:10:37 -0800 > > Dan Retzlaff <dretzl...@gmail.com> wrote: > > > > > Your description is clear, thank you. I'm not certain that the background > > > thread's reference to the Session is valid outside of the servlet > > request. > > > I would verify your assumption by logging the session's object ID when > > the > > > value is read/written. > > > > > > I have one other thought for you. I believe Wicket keeps the most recent > > > page in a deserialized state to save itself the work of deserialization > > in > > > the common case of it being required by the next request. (I think the > > > logic is in PageStoreManager, but it's not clear to me. Hopefully a dev > > can > > > confirm/correct me.) At any rate, this may cause the difference between > > > your two scenarios. In your successful, single-tab scenario, you may be > > > benefiting from a lack of serialization/deserialization round-trip. We > > have > > > noticed this difference when our components have transient variables that > > > aren't set to null in detach(): in the most recent page the variable > > > remains not-null; if the session has intermediate requests for other > > pages, > > > the variable is null when next accessed. > > > > > > Good luck, > > > Dan > > > > > > 2012/2/29 "André Schütz" <andre-p...@gmx.de> > > > > > > > Hi, > > > > > > > > Page1 gets the click of the submit button and collects the search word. > > > > This will be changed into a hash value and set as PageParameter > > > > (q=Hashvalue) to the ResponsePage which is Page2. > > > > Additionally, I store the hash value into a session HashMap which holds > > > > the hash value as key and an own class with the original search word. > > This > > > > class will be filled with the results from the search of the background > > > > thread. > > > > > > > > On Page2, I have the PageParameter as hash value and can search for the > > > > correct entry of the HashMap in the session to react, when the results > > are > > > > found. > > > > > > > > I hope, I could describe it. > > > > > > > > Andre > > > > > > > > -------- Original-Nachricht -------- > > > > > Datum: Tue, 28 Feb 2012 14:27:35 -0800 > > > > > Von: Dan Retzlaff <dretzl...@gmail.com> > > > > > An: users@wicket.apache.org > > > > > Betreff: Re: Multi Tab and Session > > > > > > > > > Hi Andre. I'm trying to understand your setup. A quickstart may be > > > > > required. > > > > > > > > > > What does your Page1's onSubmit() look like? Specifically I'd like to > > > > know > > > > > how Page2 knows to watch for "word2". > > > > > > > > > > 2012/2/28 Andre Schütz <andre-p...@gmx.de> > > > > > > > > > > > Hello, > > > > > > > > > > > > I have a problem with my application that I am not able to solve > > since > > > > > > the last three days. > > > > > > > > > > > > I realized that Wicket 1.5 provides multi tab / multi window > > support > > > > > > for more than one opened tab in a browser. > > > > > > I have a problem with multiple tabs in my program, that I want to > > > > > > describe now. > > > > > > > > > > > > The program consists of two pages. Page1 contains a search field > > that > > > > > > will be used to type in a search word. > > > > > > Page2 makes the search on a database, returns the results and > > > > > > displays it as a list. The search will be done from a background > > > > > > thread that stores the result in a hashmap in the session with the > > > > > > search word as the key. Furthermore, Page2 shows a little loading > > > > > > animation that will be updated (AjaxSelfUpdatingTimerBehavior), > > when > > > > the > > > > > > result is stored in the session. > > > > > > > > > > > > Now the problem. > > > > > > > > > > > > (1) I open the application in two tabs of the same browser. > > > > > > (2) The URL looks as follows: > > > > > > Tab1 - localhost:8080/appli/?0 > > > > > > Tab2 - localhost:8080/appli/?1 > > > > > > (3) Tab1 gets word1 in the search field and Tab2 gets word2 > > > > > > into the search field. > > > > > > (4) I press the submit button of Tab1, switch to Tab2 and press the > > > > > > submit button, too. > > > > > > (5) The two Threads start to search for the results. > > > > > > (6) During the AjaxSelfUpdatingTimeBehavior, the result panel of > > Page2 > > > > > > checks > > > > > > in its overwritten onBeforeRender method for the results. When the > > > > > result > > > > > > for the search word is found in the session, the updateBehavior of > > > > Page2 > > > > > > is stopped and the results will be displayed. > > > > > > -> Here starts my problem: > > > > > > > > > > > > None of the two pages will be updated and show the results. If I > > start > > > > > > the search in one of the Tabs, the process will be finished and the > > > > > > results displayed onto the screen. > > > > > > > > > > > > For me, it seems that both tabs share the same session data and > > also > > > > > > the same updateBehavior on the Page2. > > > > > > > > > > > > Can anybody help me with that problem? Would be great. > > > > > > > > > > > > -- > > > > > > Andre Schütz <schuetz.an...@gmx.net> > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > > > > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > > > > > > > > > > > > > > > > > -- > > > > Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir > > > > belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de > > > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > > > > > > > > > > > -- > > Andre Schütz <schuetz.an...@gmx.net> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > -- Andre Schütz <schuetz.an...@gmx.net> --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org