I solved it, it is the anonymous subclass of DatePicker. Because it is defined in the decorator class, it belongs to it. I created a separate DatePickerExt class that enables month/year selection.
2008/2/8, Martijn Lindhout <[EMAIL PROTECTED]>: > > 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 > -- Martijn Lindhout JointEffort IT Services http://www.jointeffort.nl [EMAIL PROTECTED] +31 (0)6 18 47 25 29