我有一个模态窗口里面的形式。有两种方法可以关闭窗口:填写正确的表单并提交更改,或者单击右上角的"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",即使我试图设置新的窗口关闭回调,这是空的。我该如何解决这个问题呢?
你需要调用org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow.close(AjaxRequestTarget)