2011-11-04 18 views
5

Cómo vencer la ventana emergente de diálogo de IE y Firefox cuando se intenta establecerResponsePage() desde una wicket modalWindow por debajo. La ventana emergente del cuadro de diálogo exige una respuesta a: "Esta página le pide que confirme que desea irse; es posible que los datos que ingresó no se guarden".¿Cómo se vence la ventana emergente del diálogo del navegador al llamar a Wicket setResponsePage() desde la ventana modal?

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); 
     } 
    }; 

-Rich

Respuesta

0

EDIT:Este es un truco, utilice la alternativa descrita en mi other answer.

Prueba esto:

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

Que este by-pass de Wicket incorporada PageMap? ¿Habría algún efecto secundario negativo? – jbrookover

+0

Esto sería lo mismo que abrir una página marcable desde un enlace estático o un marcador de navegador. No veo cómo podría causar ningún problema. – tetsuo

+0

Ahh, cierto. Lo siento. – jbrookover

0

creo setResponsePage() debe ir acompañada de algunos otros métodos que se comporten correctamente. Por ejemplo, a menudo incluyo setRedirect(true) cuando uso esta técnica. No estoy seguro de qué está sucediendo detrás de escena allí, pero quizás intente eso.

8

target.appendJavascript("Wicket.Window.unloadConfirmation = false;"); no funciona porque debe ejecutarse antes de modal.show(target);.

Usted podría anteponerse, en lugar de añadir, el guión, al abrir la ventana:

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

o añadir un comportamiento, para ejecutarlo en onload:

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

embargo, debe se llama antes de abrir la ventana modal, no cuando se navega fuera de la página (setResponsePage()).

+0

Para usar este último enfoque en Wicket 6, se debe usar 'Behavior' en lugar de' AbstractBheavior', y dado que 'renderOnLoadJavaScript' ya no existe, se usaría' response.render (JavaScriptHeaderItem.forScript ("..." , id)); '. –

+0

'OnDomReadyHeaderItem' – tetsuo

8

En 6.x portillo simplemente puede establecer showUnloadConfirmation false:

final ModalWindow modalWindow = new ModalWindow("modalWindow"); 
modalWindow.showUnloadConfirmation(false); 
Cuestiones relacionadas