The statelessness of the error pages didn't work because some of them have no bookmarkable constructors (either default one or one with PageParameters). I committed the other improvements. Feel free to reopen if you see more improvements
On Wed, Jun 1, 2011 at 11:49 PM, Martin Grigorov <[email protected]> wrote: > https://issues.apache.org/jira/browse/WICKET-3759 > > changing the error pages to stateless should work with this patch. > I'll try it tomorrow > > On Wed, Jun 1, 2011 at 11:30 PM, Igor Vaynberg <[email protected]> > wrote: >> shouldnt this change be wider made to stateless pages? i think the >> proper solution is making the error page stateless. >> >> -igor >> >> On Wed, Jun 1, 2011 at 1:27 PM, Martin Grigorov <[email protected]> wrote: >>> not storing the error page causes troubles with redirect_to_render >>> (RenderStrategy) or redirect_always (RedirectPolicy) because the page >>> cannot be found after the redirect >>> >>> I have a local patch that changes the default RedirectPolicy from >>> NEVER to AUTO in DefaultExceptionMapper and solves the problem, >>> because this way redirect_to_buffer is used. The change looks sensible >>> to me. I'll attach it to a ticket for review. >>> >>> On Wed, Jun 1, 2011 at 7:51 PM, Igor Vaynberg <[email protected]> >>> wrote: >>>> when a page is set to versioned=false it means that hierarchy >>>> modifications, etc, do not dirty the page. it should not imply >>>> anything else other then the dirty flag not being modified. >>>> >>>> stateless pages should not be stored. perhaps the error page (if it >>>> has no callbacks - in which case it should be auto-marked as stateless >>>> already) can override the stateless flag. >>>> >>>> makes sense? >>>> >>>> -igor >>>> >>>> On Wed, Jun 1, 2011 at 5:16 AM, Martin Grigorov <[email protected]> >>>> wrote: >>>>> A proof : https://issues.apache.org/jira/browse/WICKET-3758 >>>>> >>>>> What is the actual meaning of "versioned" ? Should not be stored or >>>>> should not stored more than one version of this page ? >>>>> >>>>> On Wed, Jun 1, 2011 at 10:24 AM, Martin Grigorov <[email protected]> >>>>> wrote: >>>>>> Hi, >>>>>> >>>>>> Yesterday while playing with the app from >>>>>> http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp I found >>>>>> that org.apache.wicket.page.PageAccessSynchronizer.lockPage(int) is >>>>>> called as many times as PageProvider#getPage() is used. >>>>>> So I did the following optimization: >>>>>> >>>>>> Index: >>>>>> wicket-core/src/main/java/org/apache/wicket/request/handler/PageProvider.java >>>>>> =================================================================== >>>>>> --- >>>>>> wicket-core/src/main/java/org/apache/wicket/request/handler/PageProvider.java >>>>>> (revision >>>>>> 1130015) >>>>>> +++ >>>>>> wicket-core/src/main/java/org/apache/wicket/request/handler/PageProvider.java >>>>>> (working >>>>>> copy) >>>>>> @@ -158,12 +158,13 @@ >>>>>> if (pageInstance == null) >>>>>> { >>>>>> pageInstance = getPageInstance(pageId, pageClass, >>>>>> pageParameters, >>>>>> renderCount); >>>>>> + if (pageInstance == null) >>>>>> + { >>>>>> + throw new PageExpiredException("Page >>>>>> expired."); >>>>>> + } >>>>>> + touchPageInstance(pageInstance); >>>>>> } >>>>>> - if (pageInstance == null) >>>>>> - { >>>>>> - throw new PageExpiredException("Page expired."); >>>>>> - } >>>>>> - touchPageInstance(pageInstance); >>>>>> + >>>>>> return pageInstance; >>>>>> } >>>>>> >>>>>> I.e. check whether to throw PageExpiredException or touch the page >>>>>> only when it was just attempted to read from the page store, all >>>>>> following calls to #getPage() work with the cached page (already >>>>>> touched). >>>>>> Everything is OK but just one test fails : >>>>>> org.apache.wicket.ajax.InternalErrorCallsAjaxOnFailureTest.showsInternalErrorPage() >>>>>> The problem is that >>>>>> org.apache.wicket.markup.html.pages.ExceptionErrorPage.isVersioned() >>>>>> returns false and this error page should not be stored. >>>>>> org.apache.wicket.Page.dirty(boolean) takes into account isVersioned() >>>>>> but >>>>>> org.apache.wicket.request.handler.PageProvider.touchPageInstance(IRequestablePage) >>>>>> doesn't and always marks the page as candidate for storing. >>>>>> >>>>>> If above is a bug I suggest to add IManageblePage#dirty(boolean) and >>>>>> use it instead session.getPageManager().touchPage(IRequestablePage). >>>>>> >>>>>> >>>>>> -- >>>>>> Martin Grigorov >>>>>> jWeekend >>>>>> Training, Consulting, Development >>>>>> http://jWeekend.com >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Martin Grigorov >>>>> jWeekend >>>>> Training, Consulting, Development >>>>> http://jWeekend.com >>>>> >>>> >>> >>> >>> >>> -- >>> Martin Grigorov >>> jWeekend >>> Training, Consulting, Development >>> http://jWeekend.com >>> >> > > > > -- > Martin Grigorov > jWeekend > Training, Consulting, Development > http://jWeekend.com > -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com
