以前工作(在1.4.7中)当从ModalWindow更新数据源SortableDataProvider时,Apache Wicket 6 DataView不会更新

时间:2017-02-01 16:27:55

标签: ajax apache wicket

正如标题所说,我正在尝试将Web应用更新为更新的Apache Wicket版本。问题非常像这里的问题,虽然链接非常陈旧(和Wicket的古老版本,这不是我正在使用的)

http://users.wicket.apache.narkive.com/tG6XOAUM/refresh-page-after-form-submit-within-modalwindow

所以我做的是: - 在常规页面中显示DataView,使用SortableDataProvider填充 - 在ModalWindow中创建一个面板以进行一些数据更改; - 在这个面板中的onSubmit(使用AjaxFallbackButton)上,将一个新项插入到我用来填充DataView的同一个SortableDataProvider中 - 然后我打电话给" target.add(wmc)"在我的DataView周围的WebMarkupContainer上 - 当我添加跟踪代码时,我的DataView.populateItem会注册更改,但实际上并未显示更改,即屏幕显然没有刷新。

如果我在一个ModalWindow内部的AjaxFallbackButton.onSubmit()中做同样的事情,但是在与我的DataView相同的WebPage中,那么一切都很顺利,我立即看到页面上的更改。

我开始升级到Wicket 8,但还有很多其他事情需要改变,我现在不想这样做。

如果需要,我可以发布代码,但我想知道是否有人遇到过这个问题。正如我所说,在Wicket 1.4.7中很好。我想,下一步将是创建一个迷你应用来证明这一点,这可能会让我找到一个解决方案,但希望从那个Wicket社区获得一些好的输入; - )

1 个答案:

答案 0 :(得分:0)

您持有从一个页面到另一个页面的引用:

public class TestBugInsertItemPage extends WebPage {

    private TestBugPage parent;

这在Wicket中是不允许的,我想知道这在1.4中是如何起作用的。

您尝试从另一个窗口更新组件,但无效:

    @Override
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        TestBugInsertItemPage.this.parent.dp.addLine();
        target.add(TestBugInsertItemPage.this.parent.wmc);
        TestBugInsertItemPage.this.parent.modal.close(target);
    }

AjaxRequestTarget仅对单个页面的单个请求有效。

您应该使用带有面板的ModelWindow。

更新您的第二个示例:

将面板传递到另一个页面不会有所作为。 Wicket将页面序列化为磁盘,因此您无法在它们之间共享任何状态。

您应该使用带有面板的模式对话框

TestBugPage.this.modal.setContent(TestBugPage.this.myPanel);

现在,TestBugPage和您的面板位于相同的组件层次结构中,它们相互通信,并且可以在同一个Ajax请求上更新它们。