I still don't understand why within the 
BaseWicketTester#processRequest() method the 
PageProvider#getPageInstance() method is called twice. The first time 
the correct page instance is returned, the second time not. I assume, 
this has to do with some kind of redirection of the same page. The 
lastResponse.isRedirect() returns true and therefore the 
processRequest() method ist called a second time forcing a redirect.

...
if (!requestCycle.processRequestAndDetach())
             {
                 return false;
             }

             recordRequestResponse();
             setupNextRequestCycle();

             if (followRedirects && lastResponse.isRedirect())
             {
                 ...
                 processRequest(null, null, true);

                 --redirectCount;
             }

             return true;
...

This is strange to me. Meanwhile I figured out, that the 
respond()-method of the WebPageRenderer.class triggers the 
redirectTo(targetUrl, requestCycle) method which sets the 
redirectLocation attribute of the MockHttpServletResponse.

After adding page.setWasCreatedBookmarkable(true) to our own PageFactory 
implementation all tests work as espected.
So what is this flag for? Why does this flag change the process of the 
request handling in this manner? Can someone give me some clarification 
about this? Thank you.

/**
      * TODO WICKET-NG javadoc
      *
      * @param wasCreatedBookmarkable
      */
     public final void setWasCreatedBookmarkable(boolean 
wasCreatedBookmarkable)
     {
         setFlag(FLAG_WAS_CREATED_BOOKMARKABLE, wasCreatedBookmarkable);
     }



Am 29.09.2011 09:40, schrieb Martin Grigorov-4 [via Apache Wicket]:
> Put a breakpoint in your factory and see what it returns and why
> PageProvider believes it is null ...
>
> On Thu, Sep 29, 2011 at 9:34 AM, Dirk Forchel <[hidden email] 
> </user/SendEmail.jtp?type=node&node=3854689&i=0>> wrote:
>
> > Hi Martin,
> > thank you for your quick response ... indeed I have another problem 
> too ...
> >
> > In our own BookmarkablePageFactoryTest I set up now the test 
> environment
> > the following way ...
> >
> >     @Before
> >     public void setUp()
> >     {
> >         // see issue https://issues.apache.org/jira/browse/WICKET-4093
> >         tester = new WicketTester(new MockApplication()
> >         {
> >             protected IPageFactory newPageFactory()
> >             {
> >                 return new BookmarkablePageFactory( linkFactory );
> >             }
> >         });
> >         ConverterLocator converterLocator =
> > (ConverterLocator)tester.getApplication().getConverterLocator();
> >         converterLocator.set( DummyData.class, new 
> DummyDataConverter() );
> >     }
> >
> > and test a page with one named parameter ...
> >
> >     @Test
> >     public void oneParameter()
> >     {
> >         PageParameters params = new PageParameters();
> >         params.set("data", "~~abc~~");
> >         tester.startPage( OneParameterPage.class, params);
> >         tester.isRenderedPage( OneParameterPage.class );
> >         assertInfoMessages( tester, "OneParameterPage(abc)" );
> >         Assert.assertEquals( 200, 
> tester.getLastResponse().getStatus() );
> >     }
> >
> > But this test (and other tests as well) are not working anymore (as it
> > was with Wicket 1.4). I've got always a PageExpiredException although
> > the Page is really created and returned within our own PageFactory
> > implementation. Additional I've dumped the stack trace for getting a
> > hint where the method is called ...
> >
> >     @Override
> >     public final <C extends IRequestablePage> IRequestablePage
> > newPage(final Class<C> pageClass, final PageParameters pageParameters)
> >     {
> >         System.out.println(">>> newPage Class "+pageClass+"
> > PageParameters "+pageParameters);
> >         Thread.dumpStack();
> >           ...
> >         IRequestablePage page = createPage( constructor, arguments );
> >         System.out.println(">>> created page "+page);
> >         return page;
> >     }
> >
> > This is the stack trace:
> >
> > >>> newPage Class class com.exedio.wig.bookmark.dummy.OneParameterPage
> > PageParameters data=[~~abc~~]
> > java.lang.Exception: Stack trace
> >     at java.lang.Thread.dumpStack(Unknown Source)
> >     at
> > 
> com.exedio.wig.bookmark.BookmarkablePageFactory.newPage(BookmarkablePageFactory.java:80)
> >     at
> > 
> org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:107)
> >     at
> > 
> org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:273)
> >     at
> > 
> org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:167)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester$LastPageRecordingPageRendererProvider.get(BaseWicketTester.java:2514)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester$LastPageRecordingPageRendererProvider.get(BaseWicketTester.java:2501)
> >     at
> > 
> org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:146)
> >     at
> > 
> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:719)
> >     at
> > 
> org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:63)
> >     at
> > 
> org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:210)
> >     at
> > 
> org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:253)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:596)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:516)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:488)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:1097)
> >     at
> > 
> com.exedio.wig.bookmark.BookmarkablePageFactoryTest.oneParameter(BookmarkablePageFactoryTest.java:135)
> >     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> >     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> >     at java.lang.reflect.Method.invoke(Unknown Source)
> >     at
> > 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> >     at
> > 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> >     at
> > 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> >     at
> > 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> >     at
> > 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> >     at
> > 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
> >     at
> > 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
> >     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >     at 
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >     at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >     at org.junit.runners.Suite.runChild(Suite.java:128)
> >     at org.junit.runners.Suite.runChild(Suite.java:24)
> >     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >     at 
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >     at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >     at
> > 
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> >     at
> > 
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >     at
> > 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> >     at
> > 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> >     at
> > 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> >     at
> > 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> > >>> Found @Bookmarkable annotation ...
> > >>> Constructor public
> > 
> com.exedio.wig.bookmark.dummy.OneParameterPage(org.apache.wicket.request.mapper.parameter.PageParameters,com.exedio.wig.bookmark.dummy.data.DummyData)
> > >>> created page [Page class =
> > com.exedio.wig.bookmark.dummy.OneParameterPage, id = 0, render count 
> = 0]
> >
> > As far as I understand, the DefaultMapperContext#newPageInstance(final
> > Class<? extends IRequestablePage> pageClass, final PageParameters
> > pageParameters) method calls the IPageFactory method for creating a new
> > page instance. This works fine.
> > But afterwards the PageExpiredException is thrown although the
> > pageInstance should not be NULL!!!???? I don't understand this. Maybe I
> > miss something?
> >
> > public IRequestablePage getPageInstance()
> >     {
> >         if (pageInstance == null)
> >         {
> >             pageInstance = getPageInstance(pageId, pageClass,
> > pageParameters, renderCount);
> >
> >             if (pageInstance == null)
> >             {
> >                 throw new PageExpiredException("Page expired.");
> >             }
> >
> >             touchPageInstance(pageInstance);
> >         }
> >         return pageInstance;
> >     }
> >
> > This is the Failure trace  running the Junit test:
> >
> > org.apache.wicket.protocol.http.PageExpiredException: Page expired.
> >     at
> > 
> org.apache.wicket.request.handler.PageProvider.getPageInstance(PageProvider.java:171)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester$LastPageRecordingPageRendererProvider.get(BaseWicketTester.java:2514)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester$LastPageRecordingPageRendererProvider.get(BaseWicketTester.java:2501)
> >     at
> > 
> org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:146)
> >     at
> > 
> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:719)
> >     at
> > 
> org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:63)
> >     at
> > 
> org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:210)
> >     at
> > 
> org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:253)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:596)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:646)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:516)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:488)
> >     at
> > 
> org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:1097)
> >     at
> > 
> com.exedio.wig.bookmark.BookmarkablePageFactoryTest.oneParameter(BookmarkablePageFactoryTest.java:135)
> >     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> >     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> >     at java.lang.reflect.Method.invoke(Unknown Source)
> >     at
> > 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> >     at
> > 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> >     at
> > 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> >     at
> > 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> >     at
> > 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> >     at
> > 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
> >     at
> > 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
> >     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >     at 
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >     at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >     at org.junit.runners.Suite.runChild(Suite.java:128)
> >     at org.junit.runners.Suite.runChild(Suite.java:24)
> >     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >     at 
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >     at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >     at
> > 
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> >     at
> > 
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >     at
> > 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> >     at
> > 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> >     at
> > 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> >     at
> > 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> >
> >
> >
> > Am 29.09.2011 08:55, schrieb Martin Grigorov-4 [via Apache Wicket]:
> >> Indeed this is missed.
> >> I'll create a ticket for it.
> >>
> >> Thanks!
> >>
> >> On Thu, Sep 29, 2011 at 8:05 AM, Dirk Forchel <[hidden email]
> >> </user/SendEmail.jtp?type=node&node=3854567&i=0>> wrote:
> >>
> >> > After migration to Wicket 1.5 I'm wondering why our tests with 
> our own
> >> > IPageFactory implementation is not working anymore. In our tests we
> >> use the
> >> > following code ...
> >> >
> >> > WicketTester tester = new WicketTester();
> >> > tester.getApplication().getSessionSettings().setPageFactory( new
> >> > FooPageFactory() );
> >> >
> >> > But in Wicket 1.5 the implemented SessionSettings class and their
> >> method
> >> > getPageFacory() is only called from Session#getPageFactory() and
> >> > SignInPanel#onBeforeRender methods, in which the first call is used
> >> in the
> >> > InlineFrame class only.
> >> >
> >> > As I figured out you should use and override the newPageFactory()
> >> method
> >> > from the Application class instead to create a custom IPageFactory
> >> > implementation. Which whould result in the following code ...
> >> >
> >> > WicketTester tester = new WicketTester(new MockApplication() {
> >> >   protected IPageFactory newPageFactory() {
> >> >        return new FooPageFactory();
> >> >   }
> >> > });
> >> >
> >> > The Application#getPageFactory() method is used in the
> >> DefaultMapperContext
> >> > class to create a new Page instance, therefore our own
> >> implementation is
> >> > used. But this is confusing to me. Maybe I miss a point but in my
> >> opinion
> >> > the ISessionSettings interface should be marked as deprecated.
> >> >
> >> >
> >> > --
> >> > View this message in context:
> >> 
> http://apache-wicket.1842946.n4.nabble.com/PageFactory-and-SessionSettings-tp3854493p3854493.html
> >> > Sent from the Users forum mailing list archive at Nabble.com.
> >> >
> >> > 
> ---------------------------------------------------------------------
> >> > To unsubscribe, e-mail: [hidden email]
> >> </user/SendEmail.jtp?type=node&node=3854567&i=1>
> >> > For additional commands, e-mail: [hidden email]
> >> </user/SendEmail.jtp?type=node&node=3854567&i=2>
> >> >
> >> >
> >>
> >>
> >>
> >> --
> >> Martin Grigorov
> >> jWeekend
> >> Training, Consulting, Development
> >> http://jWeekend.com
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [hidden email]
> >> </user/SendEmail.jtp?type=node&node=3854567&i=3>
> >> For additional commands, e-mail: [hidden email]
> >> </user/SendEmail.jtp?type=node&node=3854567&i=4>
> >>
> >>
> >>
> >> 
> ------------------------------------------------------------------------
> >> If you reply to this email, your message will be added to the
> >> discussion below:
> >> 
> http://apache-wicket.1842946.n4.nabble.com/PageFactory-and-SessionSettings-tp3854493p3854567.html
> >>
> >> To unsubscribe from PageFactory and SessionSettings, click here
> >> <
> >>
> >
> >
> > --
> > Dirk Forchel
> > Software Engineer
> >
> > Telefon +49 (351) 4108-115
> > Fax +49 (351) 4108-5115
> > [hidden email] </user/SendEmail.jtp?type=node&node=3854689&i=1>
> > www.exedio.com
> >
> > exedio Gesellschaft für Softwareentwicklung mbH
> > Buchenstraße 16 B
> > 01097 Dresden
> > Deutschland
> >
> > Handelsregister: HRB 22109, Amtsgericht Dresden
> > Sitz der Gesellschaft: Dresden
> > Geschäftsführer: Sven-Erik Bornscheuer, Lutz Kirchner, Falk Krause
> >
> >
> >
> > --
> > View this message in context: 
> http://apache-wicket.1842946.n4.nabble.com/PageFactory-and-SessionSettings-tp3854493p3854668.html
> > Sent from the Users forum mailing list archive at Nabble.com.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [hidden email] 
> </user/SendEmail.jtp?type=node&node=3854689&i=2>
> > For additional commands, e-mail: [hidden email] 
> </user/SendEmail.jtp?type=node&node=3854689&i=3>
> >
> >
>
>
>
> -- 
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email] 
> </user/SendEmail.jtp?type=node&node=3854689&i=4>
> For additional commands, e-mail: [hidden email] 
> </user/SendEmail.jtp?type=node&node=3854689&i=5>
>
>
>
> ------------------------------------------------------------------------
> If you reply to this email, your message will be added to the 
> discussion below:
> http://apache-wicket.1842946.n4.nabble.com/PageFactory-and-SessionSettings-tp3854493p3854689.html
>  
>
> To unsubscribe from PageFactory and SessionSettings, click here 
> <http://apache-wicket.1842946.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=3854493&code=ZGlyay5mb3JjaGVsQGV4ZWRpby5jb218Mzg1NDQ5M3wxOTkzMTkyMTE4>.
>  
>


-- 
Dirk Forchel
Software Engineer

Telefon +49 (351) 4108-115
Fax +49 (351) 4108-5115
dirk.forc...@exedio.com
www.exedio.com

exedio Gesellschaft für Softwareentwicklung mbH
Buchenstraße 16 B
01097 Dresden
Deutschland

Handelsregister: HRB 22109, Amtsgericht Dresden
Sitz der Gesellschaft: Dresden
Geschäftsführer: Sven-Erik Bornscheuer, Lutz Kirchner, Falk Krause



--
View this message in context: 
http://apache-wicket.1842946.n4.nabble.com/PageFactory-and-SessionSettings-tp3854493p3855608.html
Sent from the Users forum mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to