Hi Marco,

I see a quite simple solution with Wicket 6 for this. I think you just
start with your project (or even this is just a prototype?) so you
better use "the latest and greatest" :-)

What I mean is to use the new AjaxChannel.Type.Active. The active type
prevents a second Ajax call in the same channel while there is a still
running Ajax call in this channel.

The code is as simple as:

@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attrs) {
   super.updateAjaxAttributes(attrs);

   attrs.setAjaxChannel(new AjaxChannel("modalClose", Type.Active));
}

For more about the goodies in Wicket 6 read:
http://wicketinaction.com/2012/07/wicket-6-javascript-improvements/

In Wicket 1.5 you will have to add some custom JavaScript to prevent
the second request. You can unbind the event, or add a flag for
example.

On Wed, Sep 5, 2012 at 12:04 PM, Marco Di Sabatino Di Diodoro
<marco.disabat...@tirasa.net> wrote:
> Hi all,
>
> I configure into Apache Syncope the possibility to close ModalWindow with ESC 
> key press event.
>
> public class CloseOnESCBehavior extends AbstractDefaultAjaxBehavior {
>
>     private static final long serialVersionUID = 5826308247642534260L;
>     private ModalWindow modalWindow;
>
>     public CloseOnESCBehavior(ModalWindow modalWindow) {
>         this.modalWindow = modalWindow;
>     }
>
>     private static final String PRE_JS = "$(document).ready(function() {\n"
>             + "$(document).bind('keyup', function(evt) {\n"
>             + "    if (evt.keyCode == 27){\n";
>
>     private static final String POST_JS = "\n evt.preventDefault();\n"
>             + "evt.stopImmediatePropagation();\n"
>             + "    }\n"
>             + "  });\n"
>             + "});";
>
>     @Override
>     protected void respond(final AjaxRequestTarget target) {
>         modalWindow.close(target);
>     }
>
>     @Override
>     protected String findIndicatorId() {
>         return null;
>     }
>
>     @Override
>     public void renderHead(final Component component, final IHeaderResponse 
> response) {
>         response.renderJavaScript(new 
> StringBuilder(PRE_JS).append(getCallbackScript())
>                 .append(POST_JS).toString(),
>                 "closeModalOnEsc");
>     }
>
> In the modal page:
>
> add(new CloseOnESCBehavior(window));
>
> It work correctly with Chrome and Safari. With Firefox, if I press the ESC 
> key twice quickly before the window closes the console return an error:
>
> ERROR: Wicket.Ajax.Call.failure: Error while parsing response: Could not find 
> root <ajax-response> element
>
> Regards
> Marco
>
>
> --
>
> Dott. Marco Di Sabatino Di Diodoro
> Tel. +39 3939065570
>
> Tirasa S.r.l.
> Viale D'Annunzio 267 - 65127 Pescara
> Tel +39 0859116307 / FAX +39 0859111173
> http://www.tirasa.net
>
> Apache Syncope PPMC Member
> http://people.apache.org/~mdisabatino
>
>
>
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to