Hi,

I could solve my problem with the reload of the page and
the multi call of the constructors.

This evening, I created a quickstart project to show you
my problem. After finishing the code of the quickstart project,
I could not reproduce my problem. I compared the code from
the quickstart project with my own code and found the 
difference.

I made a mistake during the creation of the background thread 
and the initialization of the AjaxSelfUpdatingTimerBehavior.
The problem was the order.
I created the AjaxSelfUpdatingTimerBehavior before the Background
Thread. After changing this order, I could use my application
in multiple tabs without any problems.

Thanks for the many help.
Andre

On Thu, 1 Mar 2012 23:03:37 +0100
Andre Schütz <[email protected]> wrote:

> Hi,
> 
> I started my project with Jetty from within IDEA to use breakpoints and
> additional informations from the debugger. The Jetty server
> started without any problems, but when I call localhost:8080, I get
> he following error:
> 
> Unexpected Runtime Exception
> 
> Last cause: Can not determine Markup. Component is not yet connected to a 
> parent.
> [Page class = org.myproject.PageIndex, id = 0, render count = 1]
> 
> In my pom.xml, I defined the path to the HTML files for the corresping classes
> as:
> 
> <build>
>         <resources>
>             <resource>
>                 <filtering>false</filtering>
>                 <directory>src/main/resources</directory>
>             </resource>
>             <resource>
>                 <directory>src/main/html</directory>
>             </resource>
>             <resource>
>                 <filtering>false</filtering>
>                 <directory>src/main/java</directory>
>                 <includes>
>                     <include>**</include>
>                 </includes>
>                 <excludes>
>                     <exclude>**/*.java</exclude>
>                 </excludes>
>             </resource>
>         </resources>
>         <testResources>
>             <testResource>
>                 <filtering>false</filtering>
>                 <directory>src/test/resources</directory>
>             </testResource>
>             <testResource>
>                 <directory>src/main/html</directory>
>             </testResource>
>             <testResource>
>                 <filtering>false</filtering>
>                 <directory>src/test/java</directory>
>                 <includes>
>                     <include>**</include>
>                 </includes>
>                 <excludes>
>                     <exclude>**/*.java</exclude>
>                 </excludes>
>             </testResource>
>         </testResources>
>         <plugins>
>             <plugin>
> 
> Seems to me, that Jetty does not find the .html files?
> 
> Andre
> 
> 
> On Thu, 1 Mar 2012 10:13:00 +0200
> Martin Grigorov <[email protected]> wrote:
> 
> > Use mvnDebug instead of mvn at the command line. This will start it in
> > debug mode and you can attach to it from IDEA.
> > Otherwise Wicket quickstart comes with src/test/java/**/Start.java.
> > Run this class as normal Java application with main(String[]). From
> > the context menu in the .java file choose "Debug 'Start.main()'"
> > 
> > 2012/3/1 "André Schütz" <[email protected]>:
> > > Hi Martin,
> > >
> > > I compile the wicket project via Maven from the command line. I do not 
> > > use the IDE to start the project and trace it? Do you have a hint how I 
> > > can do that? As IDE, Ia m using  IntelliJ IDEA.
> > >
> > > Andre
> > >
> > > -------- Original-Nachricht --------
> > >> Datum: Thu, 1 Mar 2012 09:40:30 +0200
> > >> Von: Martin Grigorov <[email protected]>
> > >> An: [email protected]
> > >> Betreff: Re: Multi Tab and Session
> > >
> > >> 2012/2/29 Andre Schütz <[email protected]>:
> > >> > 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.
> > >>
> > >> Put a breakpoint in Page2 constructor and see why it is called.
> > >>
> > >> >
> > >> > (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 <[email protected]> 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" <[email protected]>
> > >> >>
> > >> >> > 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 <[email protected]>
> > >> >> > > An: [email protected]
> > >> >> > > 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 <[email protected]>
> > >> >> > >
> > >> >> > > > 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 <[email protected]>
> > >> >> > > >
> > >> >> > > >
> > >> ---------------------------------------------------------------------
> > >> >> > > > To unsubscribe, e-mail: [email protected]
> > >> >> > > > For additional commands, e-mail: [email protected]
> > >> >> > > >
> > >> >> > > >
> > >> >> >
> > >> >> > --
> > >> >> > 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: [email protected]
> > >> >> > For additional commands, e-mail: [email protected]
> > >> >> >
> > >> >> >
> > >> >
> > >> >
> > >> > --
> > >> > Andre Schütz <[email protected]>
> > >> >
> > >> > ---------------------------------------------------------------------
> > >> > To unsubscribe, e-mail: [email protected]
> > >> > For additional commands, e-mail: [email protected]
> > >> >
> > >>
> > >>
> > >>
> > >> --
> > >> Martin Grigorov
> > >> jWeekend
> > >> Training, Consulting, Development
> > >> http://jWeekend.com
> > >>
> > >> ---------------------------------------------------------------------
> > >> To unsubscribe, e-mail: [email protected]
> > >> For additional commands, e-mail: [email protected]
> > >>
> > >
> > > --
> > > NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone!
> > > Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [email protected]
> > > For additional commands, e-mail: [email protected]
> > >
> > 
> > 
> > 
> > -- 
> > Martin Grigorov
> > jWeekend
> > Training, Consulting, Development
> > http://jWeekend.com
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> > 
> 
> 
> -- 
> Andre Schütz <[email protected]>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 


-- 
Andre Schütz <[email protected]>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to