I just spent a lot of time on a really nasty error, so I figured I
should document on the mailing list in case someone else runs across
it.

Attempting to use t:saveState on an object that contains references to
a serializable inner class of a bean requires that the bean containing
the inner class be serializable.

That certainly wasn't obvious to me.

It would have made my life a lot easier if the error had been something like:

javax.faces.FacesException: java.io.NotSerializableException:
com.xyz.project.jsf.page.EditAuthorizationDocumentPage$innerclass

or

javax.faces.FacesException: java.io.NotSerializableException: Cannot
serialize inner class because outer class
com.xyz.project.jsf.page.EditAuthorizationDocumentPage is not
serializable.


But instead, you receive the not-very-helpful error:

javax.faces.FacesException: java.io.NotSerializableException:
com.xyz.project.jsf.page.EditAuthorizationDocumentPage
        at 
org.apache.myfaces.shared_impl.util.StateUtils.getAsByteArray(StateUtils.java:179)
        at 
org.apache.myfaces.shared_impl.util.StateUtils.construct(StateUtils.java:140)
        at 
org.apache.myfaces.renderkit.html.HtmlResponseStateManager.writeState(HtmlResponseStateManager.java:102)
        at 
org.apache.myfaces.application.jsp.JspStateManagerImpl.writeState(JspStateManagerImpl.java:430)
        at 
com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:579)
        at 
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:384)

Reply via email to