SOrry, it is the DateTextFieldDecorator that's causing the problem, and its code is:
public class DateTextFieldDecorator { private DateTextField widget; public DateTextFieldDecorator(DateTextField widget) { this.widget = widget; } public DateTextField from(DateType dateType) { widget.setRequired(dateType.isRequired()); widget.add(new DatePicker() { protected boolean enableMonthYearSelection() { return true; } }); widget.setLabel(new Model(dateType.getFieldName())); return widget; } } 2008/2/8, Martijn Lindhout <[EMAIL PROTECTED]>: > > Here it is: > > ERROR - Objects - Error serializing object class > nl.je.obs.web.admin.medewerkers.EditMedewerker [object=[Page class = > nl.je.obs.web.admin.medewerkers.EditMedewerker, id = 3, version = 0]] > > org.apache.wicket.util.io.SerializableChecker$WicketNotSerializableException:Unable > to serialize class: > nl.je.ddd.ui.wicket.DateTextFieldDecorator > Field hierarchy is: > 3 [class=nl.je.obs.web.admin.medewerkers.EditMedewerker, path=3] > private java.lang.Object > org.apache.wicket.MarkupContainer.children[class=[ > Ljava.lang.Object;] > private > org.apache.wicket.markup.html.ContainerWithAssociatedMarkupHelper > org.apache.wicket.markup.html.WebMarkupContainerWithAssociatedMarkup.markupHelper[2] > [class=nl.je.obs.web.admin.medewerkers.EditMedewerker$2, path=3:mwpwForm] > 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.extensions.markup.html.tabs.TabbedPanel, > path=3:mwpwForm:mw-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= > nl.je.obs.web.admin.medewerkers.PersoonsGegevensPanel, > path=3:mwpwForm:mw-tabs:panel] > private java.lang.Object > org.apache.wicket.MarkupContainer.children [class=[Ljava.lang.Object;] > private java.lang.Object > org.apache.wicket.markup.html.form.FormComponent.validators[3] [class= > org.apache.wicket.datetime.markup.html.form.DateTextField, > path=3:mwpwForm:mw-tabs:panel:geboorted] > java.lang.Object org.apache.wicket.Component.data[class=[ > Ljava.lang.Object;] > java.lang.Object org.apache.wicket.Component.data[0][1] > [class=nl.je.ddd.ui.wicket.DateTextFieldDecorator$1] > final nl.je.ddd.ui.wicket.DateTextFieldDecorator > nl.je.ddd.ui.wicket.DateTextFieldDecorator$1.this$0 [class= > nl.je.ddd.ui.wicket.DateTextFieldDecorator] <----- field that is not > serializable > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:342) > at org.apache.wicket.util.io.SerializableChecker.checkFields( > SerializableChecker.java:610) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:533) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:388) > at org.apache.wicket.util.io.SerializableChecker.checkFields( > SerializableChecker.java:610) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:533) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:388) > at org.apache.wicket.util.io.SerializableChecker.checkFields( > SerializableChecker.java:610) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:533) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:388) > at org.apache.wicket.util.io.SerializableChecker.checkFields( > SerializableChecker.java:610) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:533) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:388) > at org.apache.wicket.util.io.SerializableChecker.checkFields( > SerializableChecker.java:610) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:533) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:388) > at org.apache.wicket.util.io.SerializableChecker.checkFields( > SerializableChecker.java:610) > at org.apache.wicket.util.io.SerializableChecker.check( > SerializableChecker.java:533) > at org.apache.wicket.util.io.SerializableChecker.writeObjectOverride( > SerializableChecker.java:678) > at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:322) > at > org.apache.wicket.util.io.IObjectStreamFactory$2.writeObjectOverride( > IObjectStreamFactory.java:125) > at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:322) > at org.apache.wicket.util.lang.Objects.objectToByteArray(Objects.java > :1085) > at > org.apache.wicket.protocol.http.pagestore.AbstractPageStore.serializePage( > AbstractPageStore.java:197) > at org.apache.wicket.protocol.http.pagestore.DiskPageStore.storePage( > DiskPageStore.java:806) > at > org.apache.wicket.protocol.http.SecondLevelCacheSessionStore$SecondLevelCachePageMap.put > (SecondLevelCacheSessionStore.java:332) > at org.apache.wicket.Session.requestDetached(Session.java:1364) > at org.apache.wicket.RequestCycle.detach(RequestCycle.java:1091) > at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1334) > at org.apache.wicket.RequestCycle.request(RequestCycle.java:493) > at org.apache.wicket.protocol.http.WicketFilter.doGet( > WicketFilter.java:354) > at org.apache.wicket.protocol.http.WicketFilter.doFilter( > WicketFilter.java:194) > at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter( > ServletHandler.java:1089) > at > org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal > (OpenSessionInViewFilter.java:198) > at org.springframework.web.filter.OncePerRequestFilter.doFilter( > OncePerRequestFilter.java:75) > at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter( > ServletHandler.java:1089) > at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java > :365) > at org.mortbay.jetty.security.SecurityHandler.handle( > SecurityHandler.java:216) > at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java > :181) > at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java > :712) > at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java > :405) > at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java > :139) > at org.mortbay.jetty.Server.handle(Server.java:295) > at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java > :503) > at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete( > HttpConnection.java:827) > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511) > at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210) > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379) > at org.mortbay.jetty.bio.SocketConnector$Connection.run( > SocketConnector.java:226) > at org.mortbay.thread.BoundedThreadPool$PoolThread.run( > BoundedThreadPool.java:442) > Caused by: java.io.NotSerializableException: > nl.je.ddd.ui.wicket.DateTextFieldDecorator > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1156) > at java.io.ObjectOutputStream.defaultWriteFields( > ObjectOutputStream.java:1509) > at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java > :1474) > at java.io.ObjectOutputStream.writeOrdinaryObject( > ObjectOutputStream.java:1392) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1150) > at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1146) > at java.io.ObjectOutputStream.defaultWriteFields( > ObjectOutputStream.java:1509) > at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java > :1474) > at java.io.ObjectOutputStream.writeOrdinaryObject( > ObjectOutputStream.java:1392) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1150) > at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1146) > at java.io.ObjectOutputStream.defaultWriteFields( > ObjectOutputStream.java:1509) > at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java > :1474) > at java.io.ObjectOutputStream.writeOrdinaryObject( > ObjectOutputStream.java:1392) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1150) > at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1146) > at java.io.ObjectOutputStream.defaultWriteFields( > ObjectOutputStream.java:1509) > at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java > :1474) > at java.io.ObjectOutputStream.writeOrdinaryObject( > ObjectOutputStream.java:1392) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1150) > at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1146) > at java.io.ObjectOutputStream.defaultWriteFields( > ObjectOutputStream.java:1509) > at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java > :1474) > at java.io.ObjectOutputStream.writeOrdinaryObject( > ObjectOutputStream.java:1392) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1150) > at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1146) > at java.io.ObjectOutputStream.defaultWriteFields( > ObjectOutputStream.java:1509) > at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java > :1474) > at java.io.ObjectOutputStream.writeOrdinaryObject( > ObjectOutputStream.java:1392) > at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java > :1150) > at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326) > at > org.apache.wicket.util.io.IObjectStreamFactory$2.writeObjectOverride( > IObjectStreamFactory.java:117) > ... 29 more > > > 2008/2/8, Sebastiaan van Erk <[EMAIL PROTECTED]>: > > > > Hi, > > > > I don't see any problem with the code below, that is, from what you > > pasted I don't see any references to a TextFieldDecorator being kept. > > > > However when Wicket says that something is not serializable it gives you > > the entire object graph path to the object that is causing the problem, > > so seeing the full exception would help debug the problem. > > > > Regards, > > Sebastiaan > > > > Martijn Lindhout wrote: > > > Hi all, > > > > > > I have this code in a Panel: > > > > > > TextField name = new TextField("name", new PropertyModel(person, " > > name.value > > > ")); > > > add(WidgetDecorator.decorate(name).from(person.getName()); > > > > > > I have domain objects (person) with rich type definities. getName() > > returns > > > a Text object that contains all constraints imposed on the field > > (required, > > > min, max, etc). > > > > > > WidgetDecorator is a class I build that enriches a particular Wicket > > > component, based on the type information from the domain object. All > > > decorate methods on the WidgetDecorator are static and return a > > component > > > specific decorator, so in the sample above a new TextFieldDecorator > > will be > > > instantiated and returned. It looks like this: > > > > > > public class TextFieldDecorator { > > > > > > private TextField widget; > > > > > > public TextFieldDecorator(TextField textField) { > > > this.widget = textField; > > > } > > > > > > public TextField from(Text textType) { > > > widget.setRequired(textType.isRequired()); > > > widget.add(StringValidator.lengthBetween(textType.getMinLength > > (), > > > textType.getMaxLength())); > > > widget.setLabel(new Model(textType.getFieldName())); > > > return widget; > > > } > > > } > > > > > > Now the problem: Wicket complains that my TextFieldDecorator is not > > > serializable. But why? IMO it is not added to the component hierarchy. > > The > > > argument to the panel.add(...) method is the result of evaluating: > > > WidgetDecorator.decorate(name).from(person.getName(), which returns > > the > > > TextField widget. > > > > > > Should I redo my Java programmers exam? > > > > > > Thanx, > > > > > > > > > > -- > Martijn Lindhout > JointEffort IT Services > http://www.jointeffort.nl > [EMAIL PROTECTED] > +31 (0)6 18 47 25 29 > -- Martijn Lindhout JointEffort IT Services http://www.jointeffort.nl [EMAIL PROTECTED] +31 (0)6 18 47 25 29