Yeah, sorry, I should have suggested addStateChange, the problem is that it requires a Change attribute which can be a bit confusing because it's ignored with SecondLevelCacheSessionStore. For the next version we'll have a simple method that is more obvious to call.
So the right thing to do now is probably component.addStateChange(new Change() { public void undo() { } ); The reason why the actual change object is not used is that secondlevelcachesessionstore makes an actual "snapshot" on the page so the change insance is not really needed. -Matej On Sat, Mar 15, 2008 at 1:03 PM, Johan Compagner <[EMAIL PROTECTED]> wrote: > you shouldn't really call modelChanging() or modelChanged() > because your model is not changed at all > what is changed is your internal counter (and you should use > addStateChange()) > > But because of the way we now work, we dont do anything with the state > changes objects > anymore with the DiskPageStore (SecondLevelStore) when you call > modelChanging() the version is incremented > and that is all we need for the Store. > > the names of those 2 says it pretty much > > modelChanging() is when a model is about the change > modelChanged() is when a model is changed. > > And modelChanging will add a statechange with the old model so that it can > set that back > ofcourse if we would do that in modelChanged that wont work because the old > model is already gone. > > johan > > > > On Sat, Mar 15, 2008 at 12:53 PM, James Carman <[EMAIL PROTECTED]> > wrote: > > > > > On 3/15/08, Matej Knopp <[EMAIL PROTECTED]> wrote: > > > Not wit url like http://localhost:8080/. That's a homepage URL. It > > > doesn't contain any information about page instance, etc. so wicket > > > has to create new page instance. > > > > > > Transparent back button support is about something else. Wicket tracks > > > certain changes to page, i.e. adding or removing components which > > > triggers new page version. But in order to revert to previos page > > > version the URL must be either a listener interface url > > > (?wicket:interface=...) or a hybrid URL. So you can try to mount your > > > home page using HybridUrlCodingStrategy. Also just incrementing a > > > property will not trigger new page version. Wicket can't introspect > > > every property in your component hierarachy to determine that a new > > > page version should be created, that would be way too slow. > > > > > > To get wicket to create new page version when you increment your > > > counter you might want to call label.modelChanging() on your link > > > click handler. (You need to do this because you are just incrementing > > > a property, not changing component hierarchy or something else that > > > wicket can detect). > > > > > > When new page version is created you should see a version number > > > incrementing in your url. On back button the URL should contain > > > previous version number. > > > > > > > Ok, I've followed your instructions. Here's my new Application class: > > > > public class WicketApplication extends WebApplication > > { > > protected void init() > > { > > mount(new HybridUrlCodingStrategy("/Home.page", HomePage.class)); > > } > > > > public Class getHomePage() > > { > > return HomePage.class; > > } > > } > > > > Here's my HomePage class: > > > > public class HomePage extends WebPage > > { > > private static final long serialVersionUID = 1L; > > private static final Logger log = LoggerFactory.getLogger( > > HomePage.class); > > > > private int counter; > > > > public HomePage() > > { > > log.info("I'm (identity " + System.identityHashCode(this) + ") > > being instantiated." ); > > final Label label = new Label("message", new > > LoadableDetachableModel() > > { > > protected Object load() > > { > > return "I've been called " + counter + " times."; > > } > > }); > > add(label); > > add(new Link("refreshLink") > > { > > public void onClick() > > { > > counter++; > > log.info("I'm being called on object with identity " + > > System.identityHashCode(HomePage.this)); > > label.modelChanging(); > > } > > }); > > } > > > > protected Object writeReplace() throws ObjectStreamException > > { > > final Object replacement = super.writeReplace(); > > log.info("I'm (identity " + System.identityHashCode(this) + ") > > being write replaced by object " + replacement); > > return replacement; > > } > > } > > > > When I go to http://localhost:8080/, it redirects me to > > http://localhost:8080/Home.page.0 and that generates the following > > HTML: > > > > <html> > > <head> > > <title>Wicket Quickstart Archetype Homepage</title> > > </head> > > <body> > > <strong>Wicket Quickstart Archetype Homepage</strong> > > <br/><br/> > > <span wicket:id="message">I've been called 0 times.</span> > > <p> > > Click <a > > href="?wicket:interface=:0:refreshLink::ILinkListener::" > > wicket:id="refreshLink">here > > </a> to refresh me! > > </p> > > </body> > > </html> > > > > Now, when I click the link, the URL changes to > > http://localhost:8080/Home.page.0.1. So, the back button works and > > shows me exactly what I wanted to see! Thank you for all your help! > > > > By the way, modelChanged() and modelChanging() do two completely > > different things! It doesn't work if I try modelChanged(), but it > > does work if I do modelChanging(). It's not completely obvious what > > the distinction is from the Javadocs (when do you call one vs. the > > other). We might want to explain it a bit better. > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > -- Resizable and reorderable grid components. http://www.inmethod.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]