0

我有一个带有多个面板的 Wicket 页面,允许用户在弹出窗口中打开一个新的 Wicket 页面。用户可以输入一些数据,在弹出窗口中点击提交,提交完成后关闭。

如何在父页面中获得弹出窗口已关闭的回调,以便我可以刷新父页面(父页面需要反映用户在弹出窗口中输入的数据)?

是否可以在负责弹出窗口打开的父页面的面板中接收回调,以便我只能刷新面板本身而不是整个页面(这也需要获取 AjaxRequestTarget)?

4

3 回答 3

0

1)您需要在父页面中定义模态窗口以及您需要在其中打开它的维度。

2)使用setWindowClosedCallback(ModalWindow.WindowClosedCallback)(在父页面中)方法并在此方法中声明您想要在模式关闭后使用的代码段。请参阅此以获取更多信息文档

希望能帮助到你。

于 2013-11-07T16:12:31.817 回答
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,我将我的 reload 函数附在里面$(document).ready(function() {...});而且我认为没有理由不将所有 JS 放入文件(close.js)中,而不是将其拆分为 HTML 和一个单独的文件。

于 2013-11-06T18:27:10.877 回答
0

查看 WicketStuff 中的 ModalX 项目。它为所有模式的事物内置了“现成的”管道,包括一个非常简单的 IWindowCloseListener 接口,您只需将其传递到您的 ModalX 模式实例中,它就会安排正确的回调,在表单为时提供模式实例和 AjaxRequestTarget关闭。

于 2021-04-08T14:32:02.750 回答