Hi Dan, I don't have time to investigate deeper your application but here are the common recommendations: - don't share components between pages - share their models. even better - share just pointers which will be used by the models to find the data
Martin On Fri, Dec 3, 2010 at 3:28 AM, Dan Retzlaff <dretzl...@gmail.com> wrote: > I tracked down the "gotcha" and assembled the attached quickstart project > to demonstrate it. Can someone please clarify whether this is a bug or an > intentional design limitation? It's definitely unintuitive for those > unfamiliar with Wicket's page serialization tricks. > > In my case, the issue manifests itself when the Page within an InlineFrame > (call it InlinePage) has a reference to a component in the outer Page (call > it HomePage). After InlinePage handles a request, it gets serialized into a > page map entry along with the referenced component within HomePage, and > HomePage's PageHolder. But HomePage gets serialized separately, and includes > *its own copy* of the referenced component. Ultimately this manifests as a > corrupt object graph where a component's parent does not contain the > component itself [i.e. getParent().get(getId()) is null]. > > I believe this issue did not occur in one of the two uses I describe below > because SecondLevelCachePageMap keeps a deserialized copy of the most > recently accessed Page, averting the corruption that occurs in the > serialization roundtrip. I have not actually verified this however. > > Much care and thought has obviously gone into handling multiple pages in a > single request, but given this use case's (subtle) failure, I'm left > wondering when it is appropriate. It seems like the only safe ways to share > data bidirectionally between pages are (1) through a model that maintains > the value outside of the session/page map, or (2) through AJAX callbacks via > the client browser. True? > > Dan > > On Wed, Dec 1, 2010 at 6:22 PM, Dan Retzlaff <dretzl...@gmail.com> wrote: > >> Hello, >> >> I have a page with an embedded InlineFrame which is used to submit a >> multipart form. I would like the InlineFrame's page to share a model object >> with the parent page. This way the parent page can control the workflow >> after the form is submitted. However, something is preventing model changes >> made during the form submission from being visible in subsequent requests to >> the parent page. My guess is that issue stems from the way in which the >> child page (with its reference to the parent page) is being serialized into >> the page store because the subsequent parent requests see the *unmodified >> * model object. >> >> Further confusing me is the fact that I use the same upload panel with the >> InlineFrame in two different pages, and in one of the two the model change >> *is* seen by the parent. I'm no PageMap expert, but I debugged into >> Session enough to see that the page versions are the same between the form >> submission request and the subsequent parent page request in both >> cases. There is obviously some gotcha that I've stumbled into on one page >> and not the other. >> >> Can anyone decipher what may be going on? Or recommend a best practice for >> sharing data with an embedded iframe page? >> >> I am using Wicket 1.4.13. >> >> Thanks, >> Dan >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org >