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: [email protected]
For additional commands, e-mail: [email protected]