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

Reply via email to