In our project we are using NoVersionRequestMapper to create user friendly
URLs
seems to work as expected

On 23 September 2014 20:44, Garret Wilson <gar...@globalmentor.com> wrote:

> OMG. What a sad email to wake up to. :(
>
> Let me let all that digest for a while. I never would have imagined a
> situation this dire. Imagine if every time you went to Facebook, it
> generated a new https://www.facebook.com/jdoe?124154451 version! So
> basically Facebook could never use Wicket without rewriting the whole page
> caching scheme. Or LinkedIn. Or... actually, come to think of it, I can't
> even think of a single site that functions like Wicket, incrementing some
> "page version" counter every time you interact with the page, so that you
> can go back to other "versions". (Users don't want to go back to other
> versions! They may want to go back to other /pages/ at different URLs, but
> they realize that interacting with a single pages changes the state of that
> page---they don't expect that other "versions" are kept around somewhere.)
>
> Continuing my scenario I outlined earlier, I have an HTML page called
> MenuPage, which has <wicket:link><a href="StagingPage.html">..., the target
> page of which functions as I explained below. Every time the user goes to
> the MenuPage and clicks on the link, you're saying that Wicket will
> generate a new version of StagingPage in the cache, even with
> setVersioned(false)? It will generate a new ...StagingPage.html?23423414
> URL? There is no way to turn that off... without essentially rewriting the
> whole Wicket page request and caching mechanism??
>
> This is not good news. I'm not ranting, I'm crying.
>
> Garret
>
> On 9/23/2014 8:24 AM, Martin Grigorov wrote:
>
>> Hi,
>>
>> In short, to accomplish all this you will need several custom impls of
>> Wicket interfaces.
>> 1) custom IRequestMapper that just ignores PageInfo when generating the
>> url
>> for IPageRequestHandler. Search in the archives for
>> "NoVersionRequestMapper"
>> 2) a completely new IPageManager (interface!) that works with Class<Page>
>> instead of with Integer (pageId)
>> So everytime a url is mapped to a page class you should use it to load the
>> Page instance for this class
>>
>> In details:
>> By design only stateless pages do not have the pageId in the url! If a
>> request without pageId comes then a completely new page instance is
>> created.
>> By using something like NoVersionRequestMapper (not supported officially!)
>> only the url for the browser address bar will miss the pageId (see
>> PageAndComponentInfo class), but the pageId is in all link/form urls so
>> clicking/submitting still works. But if the user refreshes the page (F5)
>> then the state is lost!
>>
>> About Page#setVersioned(boolean)
>> This tells Wicket to not increment the pageId after an interaction with
>> the
>> page. A pageId is associated with the page when it is instantiated, but
>> any
>> link click, form submit, etc. won't create a new version of the page. The
>> final result is that every interaction (i.e. state change) with the page
>> will lead to overriding the old one in the page stores.
>> Wicket's IPageStore/IDataStore use API like: put(String sessionId, int
>> pageId, byte[] serializedPage). At the end of every request cycle all
>> rendered stateful pages are stored. If the pageId doesn't change then some
>> old serializedPage would be overriden.
>>
>> For your requirements you will need an API like: put(String sessionId,
>> Class<Page> pageClass, byte[] serializedPage) and byte [] get(String
>> sessionId, Class<Page> pageClass).
>> You can create a IPageManager wrapper that maps sessionId+pageId to
>> pageClass and use that pageClass with custom IMyPageStore and IMyDataStore
>> impls. (Just an idea out of my mind.)
>>
>>
>> Martin Grigorov
>> Wicket Training and Consulting
>> https://twitter.com/mtgrigorov
>>
>> On Tue, Sep 23, 2014 at 3:42 AM, Garret Wilson <gar...@globalmentor.com>
>> wrote:
>>
>>  Can someone explain to me exactly how page versioning works, and how to
>>> turn it off?
>>>
>>> I have a page StagingPage that contains a file uploader. This page is
>>> interesting in that when you upload some files with Button1, the page
>>> lists
>>> the files on the page and keeps them in a collection until you hit
>>> Button2,
>>> at which point the pages does Some Other Really Interesting Thing with
>>> the
>>> files. In other words, the page acts like a staging area for files,
>>> allowing you to 1) upload files and then 2) do something with them.
>>>
>>> I get this number on the end of the URLs which, from the page versioning
>>> and caching reference documentation <http://wicket.apache.org/
>>> guide/guide/versioningCaching.html>, seems to indicate the version of
>>> the
>>> page. I don't want this. I just want there to be one version of the page
>>> (even though it is stateful). The back button can go to the previous
>>> page;
>>> I don't care.
>>>
>>> So I turn off versioning in StagingPage with:
>>>
>>>     setVersioned(false);
>>>
>>>
>>> But I still get numbers at the end of the StagingPage URL. Worse, back
>>> and
>>> forward in my browser goes between apparently two versions of the page
>>> (one
>>> with the "Choose Files" button selecting files, and one without)---but
>>> the
>>> number in the URL doesn't change! Worse still, when I remove the number
>>> and
>>> reload the URL without the number, Wicket puts the number back but first
>>> increments the number! Now back and forward cycle between numbered URLs.
>>>
>>> I thought setVersioned(false) was supposed to turn all that off?
>>>
>>> In my own Guise framework, each page has a single component instance tree
>>> on the back end. Whatever you do at that URL, whenever you come back to
>>> it
>>> it will be just like you left it. Granted, there are several drawbacks
>>> such
>>> as memory consumption; Guise can learn a lot from Wicket in how the
>>> latter
>>> can serialize each page between requests, and versioning can be very
>>> useful
>>> in some situations. But here I just want a stateful page that has one
>>> single version---the current version. I don't want it to remember any
>>> previous versions. And I don't want numbers on the end of the URL. How
>>> can
>>> I turn off versioning for real?
>>>
>>> Thanks,
>>>
>>> Garret
>>>
>>>
>


-- 
WBR
Maxim aka solomax

Reply via email to