Hi Peter,

AFAIU Ismael wanted each request to instantiate a new page instance. That's
why I suggested either use completely stateless page or use a mapper which
will create a new instance every time. And this should be combined with
#disableCaching() so that the browser hits the server every time.

For your case you'll need something that supports (emulates support for)
Ajax back button.
Recently I wrote such integration between Wicket and
http://tkyk.github.com/jquery-history-plugin/ for a client. It is based on
the idea in my previous solution - HistoryAjaxBehavior but now it is more
advanced. It is based on a mix between browser events (popstate or
hashchange) + Wicket 1.5 events.

Otherwise Igor started even more advanced solution at
https://github.com/ivaynberg/wicket/tree/ajax-history. But this will have to
wait for Wicket 1.6+.

On Thu, Apr 21, 2011 at 2:52 PM, Peter Karich <peat...@yahoo.de> wrote:

>  Hi Martin,
>
> I'm using the same technic in 1.4 to avoid exceptions with ajax +
> backbutton(not sure if this is true for Ismael too):
>
>  * click on an ajax linkA, and click another one.
>  * hitting back button
>  * clicking again ajax linkA
>  * WicketRuntimeException: component
> filterPanel:filterNames:1:filterValues:2:filterValueLink not found on
> page de.jetwick.ui.HomePage
>
> So it wouldn't be an option, at least not for me, to avoid that via
> bookmarkable mappings or something.
> Or am I wrong? How would you avoid the exeption mentioned above?
>
> Then I followed those suggestions:
>
>
> http://www.richardnichols.net/2010/03/apache-wicket-force-page-reload-to-fix-ajax-back/
>
> http://blogs.atlassian.com/developer/2007/12/cachecontrol_nostore_considere.html
>
> But I'm sure there must be a cleaner way e.g. via HistoryAjaxBehavior or
> reallysimplehistory.
>
> Any hints?
>
> Regards,
> Peter.
>
> > Hi,
> >
> > In 1.5 there is
> org.apache.wicket.request.http.WebResponse.disableCaching()
> > which does the same as you did. But this is not related to your problem.
> >
> > When reloading the page Wicket will re-render the same page if it is
> > stateful, i.e. there is a special parameter in the URL, e.g.
> > ?2&something=else - here '2' means the second version.
> > To reload a new instance of the page it has to be either stateless or
> > bookmarkable.
> > By default bookmarkable means loaded with BookmarkableMapper, the URL
> looks
> > like /wicket/bookmarkable/com.example.MyPage, but if you don't like this
> URL
> > then you can create your own IRequestMapper which will be something
> between
> > BookmarkableMapper and MountedMapper.
> >
> >
> > On Wed, Apr 20, 2011 at 5:29 PM, Ismael Hasan <
> ismael.hasan.rom...@gmail.com
> >> wrote:
> >> Hello.
> >>
> >> I am facing the following problem when migrating from Wicket 1.4.16 to
> >> 1.5 RC3. First, I'll explain what I want to accomplish, how I do that
> >> in 1.4.16 and the result obtained. Next, I'll explain how I try to do
> >> the same wich 1.5 RC3, and which are the results I get.
> >>
> >> 1.- I want all of the pages in my web application to avoid caching, so
> >> they are loaded every time I use the back or reload buttons in the web
> >> application. To accomplish this, I use the following code in my
> >> BasePage class:
> >>        @Override
> >>        protected void configureResponse() {
> >>                super.configureResponse();
> >>                WebResponse response =
> >> getWebRequestCycle().getWebResponse();
> >>                response.setHeader("Cache-Control",
> >>                                "no-cache, max-age=0,must-revalidate,
> >> no-store");
> >>        }
> >> By doing this, every time I reload a page from a browser, and every
> >> time I use the back button on the browser, the page is fully reloaded:
> >> it's constructor in the Java class is called, and every item in the
> >> page is reloaded.
> >>
> >> 2.- To accomplish the same thing in Wicket 1.5, I use following code
> >> in my BasePage class:
> >>        @Override
> >>        protected void configureResponse() {
> >>                super.configureResponse();
> >>                WebResponse response = (WebResponse)
> >> getRequestCycle().getResponse();
> >>                response.setHeader("Cache-Control",
> >>                                "no-cache, max-age=0,must-revalidate,
> >> no-store");
> >>        }
> >> The problem is that when I hit the back button or the reload button in
> >> the browser, the constructor of the page is not called, and so the
> >> page is not fully reloaded. If the back button is used, the
> >> applications throws  "java.lang.ClassCastException:
> >> javax.swing.tree.DefaultMutableTreeNode cannot be cast to
> >> java.lang.String".I think this is motivated because the tree is
> >> created via Ajax, and since the constructor of the page is not called,
> >> it is not initialized when hitting the back button and tries to create
> >> the tree using a null model.
> >>
> >> May the root problem has something to do with the "must-revalidate"
> >> option? In the caching tutorial of wicket 1.5 it explicitly says
> >> "We are not sending Cache-Control: must-revalidate anymore since it
> >> implies the resource can theoretically be cached when in fact it must
> >> not."
> >> If this is the problem, is there some workaround to obtain the same
> >> result as with the "must-revalidate" option?
> >>
> >>
> >> Any advice or hint will be appreciated, and thank you very much for
> >> your attention.
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> >> For additional commands, e-mail: users-h...@wicket.apache.org
> >>
> >>
> >
>
>
> --
> http://jetwick.com open twitter search
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>


-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Reply via email to