You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Jan Mewes <ja...@ks-plus.org> on 2020/01/04 15:58:19 UTC

Support for disabling of page versioning

Hi,

Given a table which displays the state of laboratory orders,
When an order is canceled via a click on an AJAX button,
And the page is reloaded via Ctrl + R,
Then the order is again displayed with status "open".

I am concerned that this sort of behavior could lead to error states. I 
would feel better if there would not be any way to get back to the old 
state, i.e. that the ?pageId in the url should be removed for pages 
using AJAX.

I tried to achieve this in the following ways but failed:

Disable the versioning by calling the method/Page#//setVersioned(false):/
https://ci.apache.org/projects/wicket/guide/8.x/single.html#_turning_off_page_versioning

Providing a custom "MountedMapper" as show here and mentioned in the 
corresponding conversation:
https://github.com/martin-g/single-page-instance

Setting cache control headers to force a page reload:
https://www.richardnichols.net/2010/03/apache-wicket-force-page-reload-to-fix-ajax-back/

Is there any chance that the disabling of page versioning could become a 
first-class feature?

Kind regards,

Jan

Re: Support for disabling of page versioning

Posted by Jan Mewes <ja...@ks-plus.org>.
Hi Sven,

I can confirm that the reported problem can be solved by using property 
models. For the archive, I have added the solution to the gist: 
https://gist.github.com/jmewes/d0fece6d52b3d35743e9952294aba143#file-solution-java

I am happy to see that the problem was caused by my limited 
understanding and not a limitation of Wicket itself. So I have no 
interest in the requested framework behavior change anymore.

Thanks for your attention and help!

Kind regards,

Jan


Am 04.01.20 um 21:43 schrieb Sven Meier:
> Hi Jan,
>
> your labels hold stale data:
>
>     Label statusLabel = new Label("status", rowData.getStatus());
>
> When you remove the page id from the url, a new page and label is 
> instantiated, thus showing new data.
>
> But actually you should use models to bind data to your components:
>
> https://ci.apache.org/projects/wicket/guide/8.x/single.html#_propertymodel 
>
>
> This way re-rendering of the page will always show up-to-date data.
>
> Have fun
> Sven
>
>
>
> On 04.01.20 18:49, Jan Mewes wrote:
>> Hi Sven,
>>
>> Thanks for your reply.
>>
>> Here is a 12 second recording for the described scenario:
>> https://www.youtube.com/watch?v=_iL9DeChORU
>>
>> It shows that the page is re-rendered after the reload but due to the 
>> page version with outdated data for the order status. When the page 
>> version is removed, it picks up the new data from the database an 
>> everything is fine.
>>
>> Here is an extract of the relevant Wicket code for this scenario:
>> https://gist.github.com/jmewes/d0fece6d52b3d35743e9952294aba143#file-laborderpanel-java-L45-L49 
>>
>>
>> After reading the discussion thread related to Martin's 
>> "single-page-instance" repository, I came to the conclusion that it 
>> is not possible to disable this behavior without providing a custom 
>> "MountedMapper" which feels too difficult for me.
>>
>>
>> Kind regards,
>>
>> Jan
>>
>>
>> Am 04.01.20 um 17:46 schrieb Sven Meier:
>>> Hi Jan,
>>>
>>> >Given a table which displays the state of laboratory orders,
>>> >When an order is canceled via a click on an AJAX button,
>>> >And the page is reloaded via Ctrl + R,
>>> >Then the order is again displayed with status "open".
>>>
>>> the page is re-rendered on each reload. So there's no reason why the 
>>> status should be shown "open" again.
>>> Except your code keeps hold of stale information.
>>>
>>> Furthermore Wicket pages are never cached by the browser (maybe this 
>>> was different in 2010?).
>>>
>>> So we could discuss page versioning, but maybe we could first check 
>>> what problem you're actually trying to solve.
>>>
>>> Regards
>>> Sven
>>>
>>>
>>> On 04.01.20 16:58, Jan Mewes wrote:
>>>> Hi,
>>>>
>>>> Given a table which displays the state of laboratory orders,
>>>> When an order is canceled via a click on an AJAX button,
>>>> And the page is reloaded via Ctrl + R,
>>>> Then the order is again displayed with status "open".
>>>>
>>>> I am concerned that this sort of behavior could lead to error 
>>>> states. I would feel better if there would not be any way to get 
>>>> back to the old state, i.e. that the ?pageId in the url should be 
>>>> removed for pages using AJAX.
>>>>
>>>> I tried to achieve this in the following ways but failed:
>>>>
>>>> Disable the versioning by calling the 
>>>> method/Page#//setVersioned(false):/
>>>> https://ci.apache.org/projects/wicket/guide/8.x/single.html#_turning_off_page_versioning 
>>>>
>>>>
>>>> Providing a custom "MountedMapper" as show here and mentioned in 
>>>> the corresponding conversation:
>>>> https://github.com/martin-g/single-page-instance
>>>>
>>>> Setting cache control headers to force a page reload:
>>>> https://www.richardnichols.net/2010/03/apache-wicket-force-page-reload-to-fix-ajax-back/ 
>>>>
>>>>
>>>> Is there any chance that the disabling of page versioning could 
>>>> become a first-class feature?
>>>>
>>>> Kind regards,
>>>>
>>>> Jan
>>>>

Re: Support for disabling of page versioning

Posted by Sven Meier <sv...@meiers.net>.
Hi Jan,

your labels hold stale data:

     Label statusLabel = new Label("status", rowData.getStatus());

When you remove the page id from the url, a new page and label is 
instantiated, thus showing new data.

But actually you should use models to bind data to your components:

https://ci.apache.org/projects/wicket/guide/8.x/single.html#_propertymodel

This way re-rendering of the page will always show up-to-date data.

Have fun
Sven



On 04.01.20 18:49, Jan Mewes wrote:
> Hi Sven,
>
> Thanks for your reply.
>
> Here is a 12 second recording for the described scenario:
> https://www.youtube.com/watch?v=_iL9DeChORU
>
> It shows that the page is re-rendered after the reload but due to the 
> page version with outdated data for the order status. When the page 
> version is removed, it picks up the new data from the database an 
> everything is fine.
>
> Here is an extract of the relevant Wicket code for this scenario:
> https://gist.github.com/jmewes/d0fece6d52b3d35743e9952294aba143#file-laborderpanel-java-L45-L49 
>
>
> After reading the discussion thread related to Martin's 
> "single-page-instance" repository, I came to the conclusion that it is 
> not possible to disable this behavior without providing a custom 
> "MountedMapper" which feels too difficult for me.
>
>
> Kind regards,
>
> Jan
>
>
> Am 04.01.20 um 17:46 schrieb Sven Meier:
>> Hi Jan,
>>
>> >Given a table which displays the state of laboratory orders,
>> >When an order is canceled via a click on an AJAX button,
>> >And the page is reloaded via Ctrl + R,
>> >Then the order is again displayed with status "open".
>>
>> the page is re-rendered on each reload. So there's no reason why the 
>> status should be shown "open" again.
>> Except your code keeps hold of stale information.
>>
>> Furthermore Wicket pages are never cached by the browser (maybe this 
>> was different in 2010?).
>>
>> So we could discuss page versioning, but maybe we could first check 
>> what problem you're actually trying to solve.
>>
>> Regards
>> Sven
>>
>>
>> On 04.01.20 16:58, Jan Mewes wrote:
>>> Hi,
>>>
>>> Given a table which displays the state of laboratory orders,
>>> When an order is canceled via a click on an AJAX button,
>>> And the page is reloaded via Ctrl + R,
>>> Then the order is again displayed with status "open".
>>>
>>> I am concerned that this sort of behavior could lead to error 
>>> states. I would feel better if there would not be any way to get 
>>> back to the old state, i.e. that the ?pageId in the url should be 
>>> removed for pages using AJAX.
>>>
>>> I tried to achieve this in the following ways but failed:
>>>
>>> Disable the versioning by calling the 
>>> method/Page#//setVersioned(false):/
>>> https://ci.apache.org/projects/wicket/guide/8.x/single.html#_turning_off_page_versioning 
>>>
>>>
>>> Providing a custom "MountedMapper" as show here and mentioned in the 
>>> corresponding conversation:
>>> https://github.com/martin-g/single-page-instance
>>>
>>> Setting cache control headers to force a page reload:
>>> https://www.richardnichols.net/2010/03/apache-wicket-force-page-reload-to-fix-ajax-back/ 
>>>
>>>
>>> Is there any chance that the disabling of page versioning could 
>>> become a first-class feature?
>>>
>>> Kind regards,
>>>
>>> Jan
>>>

Re: Support for disabling of page versioning

Posted by Jan Mewes <ja...@ks-plus.org>.
Hi Sven,

Thanks for your reply.

Here is a 12 second recording for the described scenario:
https://www.youtube.com/watch?v=_iL9DeChORU

It shows that the page is re-rendered after the reload but due to the 
page version with outdated data for the order status. When the page 
version is removed, it picks up the new data from the database an 
everything is fine.

Here is an extract of the relevant Wicket code for this scenario:
https://gist.github.com/jmewes/d0fece6d52b3d35743e9952294aba143#file-laborderpanel-java-L45-L49

After reading the discussion thread related to Martin's 
"single-page-instance" repository, I came to the conclusion that it is 
not possible to disable this behavior without providing a custom 
"MountedMapper" which feels too difficult for me.


Kind regards,

Jan


Am 04.01.20 um 17:46 schrieb Sven Meier:
> Hi Jan,
>
> >Given a table which displays the state of laboratory orders,
> >When an order is canceled via a click on an AJAX button,
> >And the page is reloaded via Ctrl + R,
> >Then the order is again displayed with status "open".
>
> the page is re-rendered on each reload. So there's no reason why the 
> status should be shown "open" again.
> Except your code keeps hold of stale information.
>
> Furthermore Wicket pages are never cached by the browser (maybe this 
> was different in 2010?).
>
> So we could discuss page versioning, but maybe we could first check 
> what problem you're actually trying to solve.
>
> Regards
> Sven
>
>
> On 04.01.20 16:58, Jan Mewes wrote:
>> Hi,
>>
>> Given a table which displays the state of laboratory orders,
>> When an order is canceled via a click on an AJAX button,
>> And the page is reloaded via Ctrl + R,
>> Then the order is again displayed with status "open".
>>
>> I am concerned that this sort of behavior could lead to error states. 
>> I would feel better if there would not be any way to get back to the 
>> old state, i.e. that the ?pageId in the url should be removed for 
>> pages using AJAX.
>>
>> I tried to achieve this in the following ways but failed:
>>
>> Disable the versioning by calling the 
>> method/Page#//setVersioned(false):/
>> https://ci.apache.org/projects/wicket/guide/8.x/single.html#_turning_off_page_versioning 
>>
>>
>> Providing a custom "MountedMapper" as show here and mentioned in the 
>> corresponding conversation:
>> https://github.com/martin-g/single-page-instance
>>
>> Setting cache control headers to force a page reload:
>> https://www.richardnichols.net/2010/03/apache-wicket-force-page-reload-to-fix-ajax-back/ 
>>
>>
>> Is there any chance that the disabling of page versioning could 
>> become a first-class feature?
>>
>> Kind regards,
>>
>> Jan
>>

Re: Support for disabling of page versioning

Posted by Sven Meier <sv...@meiers.net>.
Hi Jan,

 >Given a table which displays the state of laboratory orders,
 >When an order is canceled via a click on an AJAX button,
 >And the page is reloaded via Ctrl + R,
 >Then the order is again displayed with status "open".

the page is re-rendered on each reload. So there's no reason why the 
status should be shown "open" again.
Except your code keeps hold of stale information.

Furthermore Wicket pages are never cached by the browser (maybe this was 
different in 2010?).

So we could discuss page versioning, but maybe we could first check what 
problem you're actually trying to solve.

Regards
Sven


On 04.01.20 16:58, Jan Mewes wrote:
> Hi,
>
> Given a table which displays the state of laboratory orders,
> When an order is canceled via a click on an AJAX button,
> And the page is reloaded via Ctrl + R,
> Then the order is again displayed with status "open".
>
> I am concerned that this sort of behavior could lead to error states. 
> I would feel better if there would not be any way to get back to the 
> old state, i.e. that the ?pageId in the url should be removed for 
> pages using AJAX.
>
> I tried to achieve this in the following ways but failed:
>
> Disable the versioning by calling the method/Page#//setVersioned(false):/
> https://ci.apache.org/projects/wicket/guide/8.x/single.html#_turning_off_page_versioning 
>
>
> Providing a custom "MountedMapper" as show here and mentioned in the 
> corresponding conversation:
> https://github.com/martin-g/single-page-instance
>
> Setting cache control headers to force a page reload:
> https://www.richardnichols.net/2010/03/apache-wicket-force-page-reload-to-fix-ajax-back/ 
>
>
> Is there any chance that the disabling of page versioning could become 
> a first-class feature?
>
> Kind regards,
>
> Jan
>