I've run into this issue a couple of times and worked around it, but I
wanted to see if there is a better way of handling it.

I have a form in a panel in a ModalWindow on top of a datatable in a page.
 When a user clicks the Save ajax button in the modal window, a done event
is bubbled up from the modal window.  The event contains the
AjaxRequestTarget from the button.

There are two components that listen for the done event:

(1) the component that launched the ModalWindow -- this listener closes the
modal window
(2) a component farther up the hierarchy which contains (1) -- this
listener (re) adds the datatable on the page

I have verified that both listeners are being called and that they are
called in the order above.  However, the datatable does not get refreshed
in the browser.

My question is: why didn't my datatable get re-rendered, even though I did
(re) add it to the containing panel?  I think this has something to do with
the datatable not realizing it is visible/active.  Or it may have something
to do with the event system :).  Or perhaps even the AjaxRequestTarget from
the panel in the modal window :).  I'm happy to put in some break points
and walk through the code if you anyone has ideas of where to look.

The workaround is to have (1) listen for the event and stop the event
propagation.  Then, in the ModalWindow.setWindowClosedCallback(), send the
event up to (2).  Doing this, the datatable does get properly refreshed.

My followup question is: is this the pattern that should be followed when
refreshing a panel under a modal window?  Namely, don't try to refresh the
page/panel a ModalWindow is on top of until the covering ModalWindow has
closed?

Thanks
Andrew

Reply via email to