You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Allen Gilbert <al...@doane.edu> on 2011/12/05 20:08:19 UTC

IRequestMapper that ignores page version

Hello,

I have a problem similar to the one outlined here:
http://apache-wicket.1842946.n4.nabble.com/Migrating-from-1-4-16-to-1-5-RC3-problem-when-trying-to-avoid-pages-caching-not-calling-the-construc-td3463183.html.
I have a page that uses a lot of Ajax (and is thus stateful/versioned), but
I need its constructor to be called any time the page is requested.
 Otherwise, if the user lands on the page via the back button, it will not
be rendered correctly.  Anyway, I'm looking into creating a custom
IRequestMapper, per Martin's suggestion in the Nabble thread.  However, I
don't know where to start. Should I extend one of the existing mappers
(e.g. MountedMapper), or should I create an entirely new implementation of
IRequestMapper?  In either case, how do I make sure that I don't screw up
handling of listener links for ajax actions on the page?  In other words,
how do I create a reliable IRequestMapper for a page that, when requested,
always re-renders itself?

If there's a different way to accomplish this (i.e. without creating a
custom IRequestMapper or making the page stateless), I'd love to know.

Thanks for your help!

-Allen

Re: IRequestMapper that ignores page version

Posted by Allen Gilbert <al...@doane.edu>.
Martin,

I had to modify your example to get it to work, as request.getUrl()
actually returns a new Url instance when it's called.  Here's what I
settled on:

@Override
public IRequestHandler mapRequest(Request request) {
Request requestToMap = request;
if ((request instanceof WebRequest) && !((WebRequest) request).isAjax()) {
PageComponentInfo info = getPageComponentInfo(request.getUrl());
if (info != null) {
Url url = request.getUrl();
url.removeQueryParameters(info.toString());
requestToMap = request.cloneWithUrl(url);
}
}
return super.mapRequest(requestToMap);
}

Does anyone see any issues with this approach?

Thanks!

-Allen

On Mon, Dec 5, 2011 at 2:28 PM, Martin Grigorov <mg...@apache.org>wrote:

> Hi,
>
> Here is an idea (again from me:-) ):
>
> Override MountedMapper and in #mapRequest(Request) do:
>
> if (((WebRequest) request).isAjax()) return super.mapRequest(request);
>
> // else
> url = request.getUrl();
> info = getPageComponentInfo(url);
> if (info != null) url.removeQueryParam(info.toString());
>
> return super.mapRequest(request)
>
> This will cut the special parameter that brings the page info
>
> On Mon, Dec 5, 2011 at 8:08 PM, Allen Gilbert <al...@doane.edu>
> wrote:
> > Hello,
> >
> > I have a problem similar to the one outlined here:
> >
> http://apache-wicket.1842946.n4.nabble.com/Migrating-from-1-4-16-to-1-5-RC3-problem-when-trying-to-avoid-pages-caching-not-calling-the-construc-td3463183.html
> .
> > I have a page that uses a lot of Ajax (and is thus stateful/versioned),
> but
> > I need its constructor to be called any time the page is requested.
> >  Otherwise, if the user lands on the page via the back button, it will
> not
> > be rendered correctly.  Anyway, I'm looking into creating a custom
> > IRequestMapper, per Martin's suggestion in the Nabble thread.  However, I
> > don't know where to start. Should I extend one of the existing mappers
> > (e.g. MountedMapper), or should I create an entirely new implementation
> of
> > IRequestMapper?  In either case, how do I make sure that I don't screw up
> > handling of listener links for ajax actions on the page?  In other words,
> > how do I create a reliable IRequestMapper for a page that, when
> requested,
> > always re-renders itself?
> >
> > If there's a different way to accomplish this (i.e. without creating a
> > custom IRequestMapper or making the page stateless), I'd love to know.
> >
> > Thanks for your help!
> >
> > -Allen
>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: IRequestMapper that ignores page version

Posted by Martin Grigorov <mg...@apache.org>.
Hi,

Here is an idea (again from me:-) ):

Override MountedMapper and in #mapRequest(Request) do:

if (((WebRequest) request).isAjax()) return super.mapRequest(request);

// else
url = request.getUrl();
info = getPageComponentInfo(url);
if (info != null) url.removeQueryParam(info.toString());

return super.mapRequest(request)

This will cut the special parameter that brings the page info

On Mon, Dec 5, 2011 at 8:08 PM, Allen Gilbert <al...@doane.edu> wrote:
> Hello,
>
> I have a problem similar to the one outlined here:
> http://apache-wicket.1842946.n4.nabble.com/Migrating-from-1-4-16-to-1-5-RC3-problem-when-trying-to-avoid-pages-caching-not-calling-the-construc-td3463183.html.
> I have a page that uses a lot of Ajax (and is thus stateful/versioned), but
> I need its constructor to be called any time the page is requested.
>  Otherwise, if the user lands on the page via the back button, it will not
> be rendered correctly.  Anyway, I'm looking into creating a custom
> IRequestMapper, per Martin's suggestion in the Nabble thread.  However, I
> don't know where to start. Should I extend one of the existing mappers
> (e.g. MountedMapper), or should I create an entirely new implementation of
> IRequestMapper?  In either case, how do I make sure that I don't screw up
> handling of listener links for ajax actions on the page?  In other words,
> how do I create a reliable IRequestMapper for a page that, when requested,
> always re-renders itself?
>
> If there's a different way to accomplish this (i.e. without creating a
> custom IRequestMapper or making the page stateless), I'd love to know.
>
> Thanks for your help!
>
> -Allen



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

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