Hello Johan et all,
Ok, I see the problem. But let me then propose a change to the exception
text. Something like "can not change hierarchy after render phase has
started". I'll create a Jira issue if you like.
But why? Well, its one of the things I tried in a long list of attempts
to do custom Ajax things. More experienced Wicketeers can probably point
me in more productive directions.
I have this set up where custom javascript uses the result of an Ajax
response and places it in a modal window (or on other places in the
page). Why? Well, our html/javascript designer refuses to use the wicket
ajax libraries but writes everything himself. The only thing he trusts
is jquery.
So I worked around this by creating my own Ajax behaviors (which is
pretty easy as you can easily get the URL that should be called from the
client). I reused AjaxRequestTarget to generate the response. Now
AjaxRequestTarget wants the component that is rendered to be a part of
the current page. I therefore add the panel to be rendered to the page,
even if it is not really used like that in the client code (as with the
modal window). Therefore, at some moment it needs to be removed again as
well.
For removal I have 2 cases:
-1- the modal window contains a form, the form might be submitted, so
the server gets feedback.
-2- the modal window only displays some information or the form is not
submitted, the server gets no feedback on the close of the modal window
For case -2- (in my earlier attempts) I tried to remove the component in
onAfterRender. After realizing that this doesn't work, I did it in the
onBeforeRender when some flag was set (accepting that it can be stored
in the session for some time).
But I only just realize that this case could be solved a lot better by
using a Page instead of a Panel to deliver the content for the modal window.
In case -1- however, I need to update the page that initiated the modal
window. As we're not allowed to keep references between pages (because
of the disk store's serialization tricks), I add the modal window panel
to the page (with the form on it), and remove it again within the
ajax-submit of the form. In the same onSubmit I update some components
on the page, re-render them (again using AjaxRequestTarget) and pass
them back to the client.
This works, but when the form is not submitted, the modal window panel
is never removed from the page. After a couple of such closes, the
response time of the page easily explodes to half a minute.
Ideally I would use a Page for the model window's content as well.
However, I see no way to get a reference to the page it was opened from.
Can anyone shine a little light on this? Is it possible to get that page
reference? How does Wicket's modal window do this?
Regards,
Erik.
Johan Compagner wrote:
Why do you want to do that?
The problem is if you affect the page then the page version is
affected. So all what is rendered now isnt really the state wat the
page has.
Thats why you get that exception when rendering has started.
On 5/6/08, Erik van Oosten <[EMAIL PROTECTED]> wrote:
Hi,
When I try to change the component hierarchy in onAfterRender I get an
exception with the text "can not change hierarchy *during* render
phase". Why is this? Isn't the render phase finished in on*After*Render?
Regards,
Erik.
--
Erik van Oosten
http://day-to-day-stuff.blogspot.com/
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]