[ 
https://issues.apache.org/jira/browse/WICKET-2617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12800238#action_12800238
 ] 

Martin Bednar commented on WICKET-2617:
---------------------------------------

Hi,

This patch dosn't work in situation described below:

I have page with AjaxTabbedPanel that contains two tabs, "tab1" that contains 
ModalWindows and AjaxButtons that fires show method on modal windows and "tab2" 
that contains some grids.

On start "tab1" is shown, and ModalWindows works, after switching to "tab2" and 
back to "tab1" ModalWindows has shown property set to true, so it can't shown 
anymore.

Martin


> ModalWindow can't be shown when it is rendered with ajax request
> ----------------------------------------------------------------
>
>                 Key: WICKET-2617
>                 URL: https://issues.apache.org/jira/browse/WICKET-2617
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.4.4
>            Reporter: Michael Mikhulya
>            Assignee: Igor Vaynberg
>             Fix For: 1.4.5
>
>
> Regression appeared with 1.4.4 release, in previous releases all worked fine.
> I load page in two requests. First one loads very small html, which then 
> loads remaining part with ajax request.
> (I do so to pass parameters after '#' to server in similar way as it is done 
> in gmail, but there are other reasons to render ModalWindow with ajax 
> request).
> ModalWindow is rendered (but not shown) with second (ajax) request.
> The private variable "shown" is set to true:
>       protected void onBeforeRender()
>       {
>               shown = makeContentVisible();
> Because of following implementation of makeContentVisible method:
>       protected boolean makeContentVisible()
>       {
>               // if user is refreshing whole page, the window will not be 
> shown
>               return getWebRequest().isAjax();
>       }
> But when I call "show" method nothing happens:
>       public void show(final AjaxRequestTarget target)
>       {
>               if (shown == false)
>               {
>                       getContent().setVisible(true);
>                       target.addComponent(this);
>                       target.appendJavascript(getWindowOpenJavascript());
>                       shown = true;
>               }
>       }
> Actually there are two problems:
> 1) behavior has changed
> 2) I didn't find safe workaround for this problem.
> Unsafe workaround as follows, notice, it can break with next wicket release 
> since base "show" method is not called in sub class:
> class MyModalWindow extends ModalWindow {
>       protected boolean visible = false;
>       @Override
>       protected boolean makeContentVisible() {
>               return visible;
>       }
>       @Override
>       public void show(org.apache.wicket.ajax.AjaxRequestTarget target) {
>               visible = true;
>               getContent().setVisible(true);
>               target.addComponent(this);
>               target.appendJavascript(getWindowOpenJavascript());
>       };
>       @Override
>       public void close(AjaxRequestTarget target) {
>               visible = false;
>               super.close(target);
>       }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to