Как победить всплывающее окно диалога браузера при вызове Wicket setResponsePage () из модального окна? - PullRequest
5 голосов
/ 04 ноября 2011

Как победить всплывающие диалоговые окна IE и Firefox при попытке setResponsePage () из калитки modalWindow, как показано ниже. Всплывающее диалоговое окно требует ответа: «На этой странице вас просят подтвердить, что вы хотите выйти - введенные вами данные могут быть не сохранены».

    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

Ответы [ 4 ]

9 голосов
/ 03 января 2014

В калитке 6.x и выше вы можете просто установить showUnloadConfirmation на false:

final ModalWindow modalWindow = new ModalWindow("modalWindow");
modalWindow.showUnloadConfirmation(false);
9 голосов
/ 30 декабря 2011

target.appendJavascript("Wicket.Window.unloadConfirmation = false;"); не работает, потому что должен запускаться до modal.show(target);.

Вы можете либо добавить, либо не добавлять скрипт, при открытии окна:

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

или добавить поведение, чтобы выполнить его на onload:

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

Но он должен называться перед открытием модального окна, а не при переходе от страницы (setResponsePage()).

0 голосов
/ 05 ноября 2011

Я считаю, setResponsePage() должны сопровождаться некоторыми другими методами для правильного поведения. Например, я часто включаю setRedirect(true) при использовании этой техники. Я не уверен, что там происходит за кулисами, но, возможно, попробую.

0 голосов
/ 04 ноября 2011

РЕДАКТИРОВАТЬ: Это взломать, используйте альтернативу, описанную в моем другой ответ .

Попробуйте это:

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