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

Reply via email to