Wicket设置窗口关闭回调不可能到处都是吗?

时间:2011-11-21 18:45:18

标签: java wicket

我有一个带有表单的模态窗口。用户可以通过两种方式关闭窗口:通过正确填写表单并提交更改,或单击右上角的“x”。

现在我正在尝试做以下事情:

当用户成功填写表单并提交更改时,在父页面上我试图显示(使用jQuery)一些有关成功的信息。

当用户点击“x”时,我希望关闭模态窗口而不需要任何其他信息。但是 setWindowClosedCallback 无法正常工作。看看我的代码,首先我得到了对modalWindow的引用(我省略了一些不像代码的有趣部分,比如添加表单输入等)。

public EditEmailForm( String id, final ModalWindow modalWindow,final User u )
{
    super( id );
    modalWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() 
    {
    private static final long serialVersionUID = 1L;

    @Override
    public void onClose(AjaxRequestTarget target) 
    {
            //here some code doing jQuery magic for parent page
    }
});
    AjaxSubmitLink closeBtn = new AjaxCloseCancelBtn( "close-x", this );

    add( new AjaxSubmitLink( "save", this )
    {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit( AjaxRequestTarget target, Form<?> form )
        {
        //here's user info change
        }

        @Override
        protected void onError( AjaxRequestTarget target, Form<?> form )
        {
            target.add( feedbackPanel );
        }
    } );
    add( closeBtn );
}


protected class AjaxCloseCancelBtn extends AjaxSubmitLink
{
    private static final long serialVersionUID = 1L;

    public AjaxCloseCancelBtn( String id, Form<?> form )
    {
        super( id, form );
        setDefaultFormProcessing( false );
    }

    @Override
    protected void onSubmit( AjaxRequestTarget target, Form<?> form )
    {
        modalWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() 
        {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClose( AjaxRequestTarget arg0 )
            {               
            }

        });
        // revert fields values
        form.clearInput();
        // close popup
        modalWindow.close( target );
    }

    @Override
    protected void onError( AjaxRequestTarget target, Form<?> form )
    {
    }

}

这段代码效果好50%,因为它在父页面上显示我想要的内容,但是当我点击“x”时它也会这样做,即使我试图设置新的窗口关闭回调是空的。任何解决方案我怎么能克服这个?

1 个答案:

答案 0 :(得分:1)

您需要调用org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow.close(AjaxRequestTarget)