See http://markmail.org/message/njv2rnsdco6uihea


On Fri, Aug 8, 2014 at 2:18 PM, Guillaume Smet <[email protected]>
wrote:

> Hi,
>
> We have a really annoying problem for some time in one of our Wicket
> applications.
>
> When a stateful page is expired, Wicket tries to rerender the page
> (nice!) but without the PageParameters (not nice: our page needs the
> parameter to be rendered).
>
> The pageParameters are set to null if there is a page id in
> processListener:
> // WICKET-4594 - ignore the parsed parameters for stateful pages
>                 pageParameters = null;
>
> It looks like it's something wanted as it's supposed to fix a bug but
> I don't really understand why we would want that.
>
> As it looks like a tricky subject and I'm not sure we can find a good
> compromise for everyone, I'm working on a local workaround to fix it
> locally. I'm pretty sure people might be interested in a valid
> workaround for this issue.
>
> I was wondering if using something like:
> @Override
>     protected IRequestHandler processListener(PageComponentInfo
> pageComponentInfo,
>             Class<? extends IRequestablePage> pageClass,
> PageParameters pageParameters) {
>         PageParameters currentRequestPageParameters = new
> PageParameters(pageParameters);
>
>         IRequestHandler handler =
> super.processListener(pageComponentInfo, pageClass, pageParameters);
>
>         if (handler instanceof ListenerInterfaceRequestHandler) {
>             ListenerInterfaceRequestHandler listenerPageHandler =
> (ListenerInterfaceRequestHandler) handler;
>
>             if (listenerPageHandler.getPageParameters() == null &&
>                     currentRequestPageParameters != null &&
> currentRequestPageParameters.getNamedKeys().size() > 0) {
>                 PageProvider provider = new PageProvider(pageClass,
> currentRequestPageParameters);
>                 provider.setPageSource(getContext());
>                 handler = new RenderPageRequestHandler(provider,
> RedirectPolicy.ALWAYS_REDIRECT);
>             }
>         }
>
>         return handler;
>     }
> in a MountedMapper could do the trick?
>
>
Can you give us a diff instead ?
It is hard to spot the change.


> It works as far as I can test it but I'm wondering if there might be
> something fishy there or side effects I should be aware of.
>
> We are using the PageParameterAwareMountedMapper of Johannes [1] and
> there's a comment in the code I can't really explain:
> // This check is necessary to prevent a
>                 // RestartResponseAtInterceptPageException at the wrong
> time in
>                 // request cycle
>                 if (provider.hasPageInstance()) {
>
> In my case, I won't have a page instance as the page is expired and I
> don't see why the processListener method could be called twice but I
> think it might be worth asking for advice.
>
> Thanks for your feedback.
>
> [1]
> https://github.com/unterstein/wicket-tales/blob/master/src/main/java/org/wickettales/request/mapper/PageParameterAwareMountedMapper.java
>

Reply via email to