Use BookmarkablePageLink(MyPage.class, pageParameters) instead of Link {onClick()} to go the page. Try to make your page stateless (by using just stateless components).
Or roll your own IRequestMapper which will always instantiate a new page instance when your conditions are met, e.g. the request path is "project_show". On Tue, Apr 26, 2011 at 1:29 PM, Ismael Hasan <ismael.hasan.rom...@gmail.com> wrote: > Hello, Peter and Martin, thank you very much for your feedback. > > Martin, you are right, I want that the page constructors are called > everytime a page is loaded in the browser. I followed your > instructions (I use > org.apache.wicket.request.http.WebResponse.disableCaching() , and my > pages are bookmarkable according to the "Page.isBookmarkable()" > function), yet the problem persists. > > After some tests, it seems to have something to do with the special > version parameter in the URL you mentioned. I'll explain it through an > example: > > 1- I enter the page through a link; it works perfectly. Its version is 8. > http://localhost:8080/projects_show?8&toShow=4 > > 2- I follow a link in this page to another one, and there is no > problem. This page version is 9. > http://localhost:8080/project_show?9&toShow=4&pj=103 > > 3 - I hit the back button to the "projects_show" page, and then it > crash (and the page constructor is not called). The page version is 8 > http://localhost:8080/projects_show?8&toShow=4 > > 4 - If I just copy the previous URL to another tab in the browser, it > crashes and the page constructor is not called (same behaviour as in > point 3). The page version is 8. > > 5 - If I copy the URL to another tab, but I change the special version > parameter for another one which was not used yet (50, for instance), > the page constructor is called, and the application works correctly. > The page version is automatically updated to the next number in the > sequence (in this case, 10). > http://localhost:8080/projects_show?10&toShow=4 > > > So, I think a workaround could be a "Just ignore the version > parameter" option. Can you tell me if such an option exists in Wicket, > or if you guess another workaround/solution for this issue? > > Again, thank you for your answers, and best regards. > > > > > > > 2011/4/21 Peter Karich <peat...@yahoo.de>: >> Hi Martin, >> >>> AFAIU Ismael wanted each request to instantiate a new page instance. >> >> ah, ok. I thought he did this to avoid the same exception like me ... >> >>> Recently I wrote such integration between Wicket and >>> http://tkyk.github.com/jquery-history-plugin/ for a client. >> >> I guess nothing open source :) ? >> >>> But this will have to wait for Wicket 1.6+. >> >> ok. but I'll try to make use of HistoryAjaxBehavior in the mean time :) >> >> Regards, >> Peter. >> >>> 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 >>>> >>>> >>> >> >> >> -- >> 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 >> >> > > --------------------------------------------------------------------- > 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 --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org