如何在wicket中动态添加对话框到网页?

时间:2015-02-13 22:05:59

标签: wicket

我已经编写了自己的对话框,并且在我的索引页面上有一个AjaxLink 何时单击AjaxLink。我将表现出打开我的对话框实例。 这是我的代码

add(new AjaxLink("open.working.date.dialog") {

            @Override
            public void onClick(AjaxRequestTarget target) {
                WorkingDateDialog dialog = new WorkingDateDialog("working.date.dialog", getString("index.working.date.dialog.title"), true);
                Index.this.add(dialog);
                dialog.open(target);
            }
        });

当然,在我的网页上,html标记我没有引用组件ID working.date.dialog,它会抛出异常。 但当我用 this.add(对话框); target.add(对话框)替换 Index.this.add(对话框); 时; 对话框无法奏效。 还有其他方法可以向页面添加动态对话框吗? 在jquery中,我只需将对话框html附加到body然后通过jquery打开它就可以轻松完成。 谢谢你们的帮助!

2 个答案:

答案 0 :(得分:1)

一个选项是在页面的构造函数中添加对话框并最初隐藏它。然后在单击链接时将其标记为可见并将其添加到AjaxRequestTarget。

另一种选择是添加具有相同组件ID的虚拟/空WebMarkupContainer,然后将其替换为#onClick()中的对话框。

答案 1 :(得分:0)

你违背了wicket在这里做事的方式,这会给你带来很大的痛苦。 :-)首先,WorkingDateDialog需要扩展ModalWindow。假设确实如此,这是我的建议。

在你的ajax链接上方添加以下代码:

final WorkingDateDialog dialog = new WorkingDateDialog("working.date.dialog", getString("index.working.date.dialog.title"), true);
add(dialog);

然后你的ajax链接变为:

add(new AjaxLink("open.working.date.dialog") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            dialog.show(target);
        }
    });

因此,您始终将ModalWindow实例添加到页面层次结构中。它'只有在有人点击链接时才会看到。

我希望这会对你有所帮助。如果您有任何问题,请与我们联系。