我有一个带有多个面板的Wicket页面,允许用户在弹出窗口中打开一个新的Wicket页面。用户可以输入一些数据,在弹出窗口中单击“提交”,并在处理完提交后关闭。
如何在弹出窗口已关闭的父页面中获得回调,以便我可以刷新父页面(父页面需要反映用户在弹出窗口中输入的数据)?
是否可以在负责弹出窗口的父页面板中接收回调,以便我只能刷新面板本身而不是整页(这也需要获取AjaxRequestTarget)? / p>
答案 0 :(得分:0)
我遇到了同样的问题,我使用javascript重新加载父页面解决了它。我不知道是否有更好的解决方案使用wicket。 但这是我的:
在弹出的java文件中:
//...
Form<Void> form = new Form<Void>("form") {
boolean close = false; // it says when the user has closed the window
@Override protected void onSubmit() {
//...
close = true;
}
@Override public void renderHead(IHeaderResponse response) {
super.renderHead(response);
if(close) {
// This javascript will close the file
response.renderJavaScriptReference("js/close.js");
}
}
};
popup.js:
var _close = true;
在弹出窗口的HTML中:
<script type="text/javascript">
// if the var user is set and true it will reload the opener page and close itself
function reload() {
if(typeof _close != 'undefined' && _close) {
window.opener.location.reload();
self.close();
}
}
</script>
解决方案非常混乱(即使是JS它也是非常容易改进的),但它有效:P
例如,现在我使用JQuery,我将$(document).ready(function() {...})
内的重载函数包含在内;我没有看到没有理由不把所有的JS放在文件(close.js)中,而不是拆分HTML和分离的文件。
答案 1 :(得分:0)
1)您需要在父页面中定义模态窗口以及打开它所需的尺寸。
2)使用setWindowClosedCallback(ModalWindow.WindowClosedCallback)
(在父页面中)方法,并在模式关闭后声明此方法中的一段代码。
有关详细信息docs
希望它有所帮助。
答案 2 :(得分:0)
查看 WicketStuff 中的 ModalX 项目。它为所有模态事物内置了“现成的”管道,包括一个非常简单的 IWindowCloseListener 接口,您只需将其传递到您的 ModalX 模态实例中,它就会安排正确的回调,当表单为时提供模态实例和 AjaxRequestTarget关闭。