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&#039;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]

Reply via email to