2011-11-04 11 views
5

Come sconfiggere popup di dialogo IE e Firefox quando si tenta di impostareRisponsePage() da una finestra modale wicket per sotto. Il popup della finestra di dialogo richiede una risposta a: "Questa pagina ti chiede di confermare che vuoi andartene. I dati che hai inserito potrebbero non essere salvati".Come disattivare il popup della finestra di dialogo del browser quando si chiama Wicket setResponsePage() dalla finestra modale?

AjaxLink signInContainer = new AjaxLink("signInContainer") { 
     @Override 
     public void onClick(AjaxRequestTarget target) { 
      target.appendJavascript("Wicket.Window.unloadConfirmation = false;"); 

      modalWindow.close(target); 
      setResponsePage(SignInPage.class); 
      modalWindow.close(target); 
     } 
    }; 

-Ricca

risposta

0

EDIT:Si tratta di un hack, utilizzare l'alternativa descritto nel mio other answer.

Prova questo:

public void onClick(AjaxRequestTarget target) { 
    modal.close(target); 
    CharSequence url = urlFor(HomePage.class, new PageParameters("gone=true")); 
    target.appendJavascript("window.location='" + url + "';"); 
} 
+0

Sarebbe questo tangenziale di Wicket built-in PageMap? Ci sarebbero effetti collaterali negativi? – jbrookover

+0

Questa operazione equivale all'apertura di una pagina di un segnalibro da un collegamento statico o da un segnalibro del browser. Non riesco a vedere come potrebbe causare alcun problema. – tetsuo

+0

Ah, vero. Scusate. – jbrookover

0

credo setResponsePage() dovrebbe essere accompagnato da alcuni altri metodi per comportarsi correttamente. Ad esempio, includo spesso setRedirect(true) quando utilizzo questa tecnica. Non sono sicuro di cosa stia succedendo dietro le quinte, ma forse ci provi.

8

target.appendJavascript("Wicket.Window.unloadConfirmation = false;"); non funziona perché deve essere eseguito prima di modal.show(target);.

Si potrebbe o prepend, invece di accodamento, lo script, quando si apre la finestra:

add(new AjaxLink<Void>("show") { 
    @Override 
    public void onClick(AjaxRequestTarget target) { 
     target.prependJavascript("Wicket.Window.unloadConfirmation = false;"); 
     modal.show(target); 
    } 
}); 

o aggiungere un comportamento, per eseguirlo su onload:

modal.add(new AbstractBehavior() { 
    @Override 
    public void renderHead(IHeaderResponse response) { 
     response.renderOnLoadJavascript("Wicket.Window.unloadConfirmation = false;"); 
    } 
}); 

Ma, si deve si chiami prima di aprire la finestra modale, non quando si naviga lontano dalla pagina (setResponsePage()).

+0

Per usare quest'ultimo approccio in Wicket 6, si dovrebbe usare 'Behavior' invece di' AbstractBheavior', e dato che 'renderingOnLoadJavaScript' non esiste più, si userebbe' response.render (JavaScriptHeaderItem.forScript ("..." , id)); '. –

+0

'OnDomReadyHeaderItem' – tetsuo

8

In wicket 6.x si può semplicemente impostare showUnloadConfirmation su false:

final ModalWindow modalWindow = new ModalWindow("modalWindow"); 
modalWindow.showUnloadConfirmation(false); 
Problemi correlati