从模态窗口调用Wicket setResponsePage()时如何打败浏览器对话框弹出窗口?

Ric*_*lee 6 java browser wicket modal-dialog

如何尝试从wicket modalWindow下面的setResponsePage()中击败IE和Firefox对话框弹出窗口.对话框弹出窗口要求回答:"此页面要求您确认要离开 - 您输入的数据可能无法保存."

    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);
        }
    };
Run Code Online (Sandbox Code Playgroud)

-丰富

and*_*rei 10

在wicket 6.x及更高版本中,您只需设置showUnloadConfirmationfalse:

final ModalWindow modalWindow = new ModalWindow("modalWindow");
modalWindow.showUnloadConfirmation(false);
Run Code Online (Sandbox Code Playgroud)


tet*_*suo 9

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);
    }
});
Run Code Online (Sandbox Code Playgroud)

或添加行为,以执行它onload:

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

但是,必须在打开模态窗口之前调用它,而不是在远离页面导航时调用(setResponsePage()).


tet*_*suo 0

编辑:这是一个黑客,使用我的 其他答案中描述的替代方案。

尝试这个:

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