because your behavior is an anonymous class it keeps a reference to its parent - the visitor. visitors are not serializable. the easiest way to fix it is to make the behavior you are adding an inner class of the page.
-igor On Tue, Aug 17, 2010 at 8:05 AM, allgo <soumya_...@yahoo.co.in> wrote: > > Hi fellow wicket users, > I am a user of Wicket 1.4.8 > I am trying to use a TabbedPanel inside which there are several individual > Panels. Now one of the Panel has a form with quite a few RadioChoices and > DropDownChoice objects. I am updating a top level flag whenevr there is any > change on any form element to trigger a pop-up asking the user to save > un-saved changes on the page when they try to move away from that tabbed > panel to soem other page. > > Since there are multiple form elements I am using a onBeforeRender() method > in the ChildPanel class and applying AjaxFormBehaviour on all child elements > at one place to avoid redundancy of code for each radio element or dropdown > element as follows - > > protected void onBeforeRender() { > > if (!behaviorAssigned) { > behaviorAssigned = true; > > visitChildren(new IVisitor<Component>() { > > public Object component(Component component) { > if (component instanceof RadioChoice) { > component.add(new > AjaxFormSubmitBehavior("onclick") { > > �...@override > protected void > onError(AjaxRequestTarget target) { > // TODO > Auto-generated method stub > > } > > �...@override > protected void > onSubmit(AjaxRequestTarget target) { > > parent.setPageChanged(Boolean.TRUE); > > } > > > }); > } > if (component instanceof > DropDownChoice<?>) { > component.add(new > AjaxFormComponentUpdatingBehavior( > "onchange") { > protected void > onUpdate(AjaxRequestTarget target) { > > parent.setPageChanged(Boolean.TRUE); > } > }); > } > return null; > } > > }); > super.onBeforeRender(); > } > > Problem is whenever the Panel is loaded I am getting loads of > WicketNotSerializableExceptions - > > > > org.apache.wicket.util.io.SerializableChecker$WicketNotSerializableException: > Unable to serialize class: com.mycompany.test.calendar.ChildPanel$7 > Field hierarchy is: > 5 [class=com.mycompany.test.HomeBasePage, path=5] > private java.lang.Object org.apache.wicket.MarkupContainer.children > [class=[Ljava.lang.Object;] > java.lang.Object org.apache.wicket.Component.data[10] > [class=com.mycompany.test.HomeBasePage$6, path=5:tabs] > private java.lang.Object org.apache.wicket.MarkupContainer.children > [class=[Ljava.lang.Object;] > private org.apache.wicket.markup.html.link.PopupSettings > org.apache.wicket.markup.html.link.Link.popupSettings[1] > [class=com.mycompany.test.settings.SettingsLazyPanel, path=5:tabs:panel] > private java.lang.Object > org.apache.wicket.MarkupContainer.children > [class=com.mycompany.test.settings.SettingsLazyPanel$1, > path=5:tabs:panel:grid] > private java.lang.Object > org.apache.wicket.MarkupContainer.children > [class=com.mycompany.test.settings.SettingBasePanel, > path=5:tabs:panel:grid:content] > private java.lang.Object > org.apache.wicket.MarkupContainer.children [class=[Ljava.lang.Object;] > private > org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow$WindowClosedCallback > org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow.windowClosedCallback[1] > [class=com.mycompany.test.settings.SettingBasePanel$6, > path=5:tabs:panel:grid:content:tabs] > private java.lang.Object > org.apache.wicket.MarkupContainer.children [class=[Ljava.lang.Object;] > private > org.apache.wicket.markup.html.link.PopupSettings > org.apache.wicket.markup.html.link.Link.popupSettings[1] > [class=com.mycompany.test.calendar.ChildPanel, > path=5:tabs:panel:grid:content:tabs:panel] > private java.lang.Object > org.apache.wicket.MarkupContainer.children [class=[Ljava.lang.Object;] > java.lang.Object > org.apache.wicket.Component.data[2] > [class=org.apache.wicket.markup.html.WebMarkupContainer, > path=5:tabs:panel:grid:content:tabs:panel:dayMonthGrid] > private java.lang.Object > org.apache.wicket.MarkupContainer.children > [class=com.mycompany.test.calendar.ChildPanel$1, > path=5:tabs:panel:grid:content:tabs:panel:dayMonthGrid:dayMonthView] > private java.lang.Object > org.apache.wicket.MarkupContainer.children [class=[Ljava.lang.Object;] > private java.lang.Object > org.apache.wicket.MarkupContainer.children[0] > [class=org.apache.wicket.markup.html.list.ListItem, > path=5:tabs:panel:grid:content:tabs:panel:dayMonthGrid:dayMonthView:0] > private java.lang.Object > org.apache.wicket.MarkupContainer.children > [class=com.mycompany.test.calendar.ChildPanel$1$1, > path=5:tabs:panel:grid:content:tabs:panel:dayMonthGrid:dayMonthView:0:dayMonthButton] > private final > org.apache.wicket.markup.html.WebMarkupContainer > com.mycompany.test.calendar.ChildPanel$1$1.val$availableBox > [class=org.apache.wicket.markup.html.WebMarkupContainer, > path=5:tabs:panel:grid:content:tabs:panel:availableBox] > private java.lang.Object > org.apache.wicket.MarkupContainer.children [class=[Ljava.lang.Object;] > java.lang.Object > org.apache.wicket.Component.data[1] > [class=org.apache.wicket.markup.html.form.Form, > path=5:tabs:panel:grid:content:tabs:panel:availableBox:form] > private java.lang.Object > org.apache.wicket.MarkupContainer.children [class=[Ljava.lang.Object;] > private java.lang.Object > org.apache.wicket.MarkupContainer.children[0] > [class=org.apache.wicket.markup.html.form.RadioChoice, > path=5:tabs:panel:grid:content:tabs:panel:availableBox:form:availableOption] > java.lang.Object > org.apache.wicket.Component.data [class=[Ljava.lang.Object;] > java.lang.Object > org.apache.wicket.Component.data[0][1] > [class=com.mycompany.test.calendar.ChildPanel$7$1] > final > com.mycompany.test.calendar.ChildPanel$7 > com.mycompany.test.calendar.ChildPanel$7$1.this$1 > [class=com.mycompany.test.calendar.ChildPanel$7] <----- field that is not > serializable > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:346) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > at > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > at > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > at > org.apache.wicket.util.io.SerializableChecker.writeObjectOverride(SerializableChecker.java:684) > at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:298) > at > org.apache.wicket.util.io.IObjectStreamFactory$DefaultObjectStreamFactory$2.writeObjectOverride(IObjectStreamFactory.java:129) > at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:298) > at > org.apache.wicket.util.lang.Objects.objectToByteArray(Objects.java:1124) > at > org.apache.wicket.protocol.http.pagestore.AbstractPageStore.serializePage(AbstractPageStore.java:203) > at > org.apache.wicket.protocol.http.pagestore.DiskPageStore.storePage(DiskPageStore.java:840) > at > org.apache.wicket.protocol.http.SecondLevelCacheSessionStore$SecondLevelCachePageMap.put(SecondLevelCacheSessionStore.java:332) > at org.apache.wicket.Session.requestDetached(Session.java:1400) > at org.apache.wicket.RequestCycle.detach(RequestCycle.java:1176) > at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1454) > at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) > at > org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:479) > at > org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:312) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) > at > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) > at java.lang.Thread.run(Thread.java:595) > Caused by: java.io.NotSerializableException: > com.mycompany.test.calendar.ChildPanel$7 > at > java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081) > at > java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375) > > > > > > However when I add the AjaxFormSubmitBehaviour to individual form components > and comment out the onBeforeRender it works fine without any errors.. > any clue guys? > > Cheers, > Allgo > > -- > View this message in context: > http://apache-wicket.1842946.n4.nabble.com/AjaxFormSubmitBehavior-causes-serialization-issues-inside-onBeforeRender-tp2328509p2328509.html > Sent from the Wicket - User mailing list archive at Nabble.com. > > --------------------------------------------------------------------- > 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