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

Marc Nuri commented on WICKET-4257:
-----------------------------------

The bug happens whenever the submitlink is double clicked, as a workaround you 
can override AjaxSubmitLink with the following code to temporarily disable 
onclick until the first event is totally processed:



                        @Override
                        protected IAjaxCallDecorator getAjaxCallDecorator() {
                            return new AjaxCallDecorator() {

                                @Override
                                public CharSequence decorateScript(Component c, 
CharSequence script) {
                                    return String.format(
                                            //Store the old function in 
onclick_ 
                                            
"this.onclick_disabled=this.onclick;"
                                            //Substitute onclick function
                                            + " this.onclick=function() { 
return false; };%s", script);
                                }

                                @Override
                                public CharSequence 
decorateOnSuccessScript(Component c, CharSequence script) {
                                    return String.format(
                                            //Restore old function
                                            "if (typeof(this.onclick_disabled) 
!= 'undefined') this.onclick=this.onclick_disabled;%s",
                                            script);
                                }

                                @Override
                                public CharSequence 
decorateOnFailureScript(Component c, CharSequence script) {
                                    return String.format(
                                            //Restore old function
                                            "if (typeof(this.onclick_disabled) 
!= 'undefined') this.onclick=this.onclick_disabled;%s",
                                            script);
                                }
                            };
                        }
                
> Ajax indicator getting stuck when button is pressed multiple times
> ------------------------------------------------------------------
>
>                 Key: WICKET-4257
>                 URL: https://issues.apache.org/jira/browse/WICKET-4257
>             Project: Wicket
>          Issue Type: Bug
>    Affects Versions: 1.4.19
>            Reporter: Nazaret Kazarian
>            Priority: Minor
>         Attachments: ajax-indicator.rar
>
>
> http://apache-wicket.1842946.n4.nabble.com/Ajax-busy-indicator-getting-stuck-td4082837.html
> I have added a global ajax indicator to all my pages by having all 
> pages (through a TemplatePage superclass) implement the 
> IAjaxIndicatorAware interface. 
> Generally it works, but I have noticed that it is quite easy to get 
> the ajax indicator stuck spinning indefinitely, by issuing many ajax 
> calls quickly the one after the other. For example if I press an ajax 
> button multiple times quickly the busy indicator gets stuck. 
> It seems as if the Wicket.show(hide)Incrementally js functions lose 
> count of ajax requests and the busy indicator is never actually 
> hidden.
> With a little reverse engineering I noticed that maybe one of the 
> cases this happens is this: an ajax button is pressed, 
> showIncrementally is executed, but the actual ajax request is 
> postponed because its channel is busy. When the time comes to actually 
> execute the request, the request is stopped because of precondition 
> check, and thus hideIncrementally is never called. This loses the 
> count. A fix might be to call hideIncrementally when the ajax request 
> precondition is not met. As to why the precondition is not met, I am 
> guessing it's because the previous ajax request did DOM replacement in 
> a way that the precondition of the queued request is no longer met. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to