Hi MartijnYes I know that, but as I stated, it's still possible to reload that page and perform actions on it (they are *all* stateful pages) - I must know how I can suppress that. I don't care if the user goes back and sees the page from the cache but he mustn't be able to perform any actions on it which I could not avoid yet, my knowledge of the page store implementation is too shallow; I don't know why the user may still access the previous page even thought I issued a Session.clear() which will call IPageMap.clear() on all pagemaps... Maybe because it's the previous page and it cannot really be removed .. ?
Thanks for your input Matt On 2011-01-26 12:10, Martijn Dashorst wrote:
Unless you completely invalidated the browser/client side cache of markup, people can still use the back button and will be presented with the markup as it was rendered at that time. It is not until the user performs an action at that page when wicket will try to retrieve the page from the page store. And only then will it see that the page is no longer available (provided the page was stateful, and the action URL is not targetting a stateless action) and present the user with page expired (or whatever you configured as the page expired page). Martijn On Wed, Jan 26, 2011 at 11:17 AM, Matthias Keller <[email protected]> wrote:On 2011-01-25 18:20, Jeremy Thomerson wrote:On Tue, Jan 25, 2011 at 11:14 AM, Matthias Keller wroteHi List We've got the following scenario: After a user hopped through a wizard, he'll reach a confirmation page in our workflow. Now the session still needs to remain active but I want to prohibit going back into the wizard and resend it again. I experimented with Session.clear() and Session.getPageMaps() and calling pageMap.remove() on each instance returned, to no avail - after clicking back, the user may still access the wizard again. What's the correct way to 'expire' *all* previous pages so that going back using the back-button is not possible anymore? And, where do I need to put that specific code (at the end of the wizard after calling setResponsePage(), in the onInitialize() of the confirmation page, ... ?Have you looked at IPageMap#clear()? I'm not 100% sure where you are able to put it. I think you could put it just before calling setResponsePage. Not after, though (since setResponsePage throws an exception that stops processing, your code wouldn't get called after it.)Session.clear() does just this, it visits all pagemaps and calls clear() on them. Though this seems to clear up some things (when I get all pagemaps afterwards programmatically, they're gone), I can still go back with the back button and reload the pages as often as I like. BTW, setResponsePage() does not throw any exceptions (at least not for 1.4.X), it just stores the nexxt page somewhere in the RequestCycle for later usage. It would be great if someone with deeper pagemaps-knowledge could chime in to find out the right place and way to clear all old pages...Is there some cool debugging feature or call I'd could do to see all thepages in the pagemaps with their versions et al in order to find out what to call to clear that...Add a dependency to wicket-devutils and then in your base page (hopefully you have a base page for all your pages), add a DebugBar. That will have some links to the inspector, etc...Thanks, I'll give it a shot this afternoon Matt
smime.p7s
Description: S/MIME Cryptographic Signature
