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]
>
>

Reply via email to