从Wicket中弹出窗体提交的父页面回调

时间:2013-11-06 17:14:29

标签: wicket wicket-6

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

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

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

3 个答案:

答案 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关闭。