0

我需要使用 Wicket 1.5 创建一个网页,它可以显示可变数量的面板来捕获用户输入。所有面板具有相同的结构。该页面将从一个面板开始,并包含一个按钮以根据需要动态添加更多内容。

因此,在最初呈现页面时,面板的数量是未知的。实际上我会动态地改变页面的结构。这在 Javascript 中是可能的,使用document.addElement()

我过去做过类似的事情,在页面加载时创建所有组件,并有选择地显示/隐藏组件。

这里的区别在于组件(面板)的数量最初是未知的。我不确定 Wicket 将如何实现这一点。

4

2 回答 2

4

这实际上是一个常见的用例,通常使用 RepeatingView 完成(ListView 会重新绘制所有面板,这可能不是您想要的)。

http://www.stackoverflow.com/questions/7807514/can-i-add-an-element-to-a-repeatingview-without-refreshing-the-latter

final RepeatingView rv = new RepeatingView("rv");
rv.add(new MyPanel(rv.newChildId()));
...
AjaxLink addPanelLink = new AjaxLink("addPanelLink") {
     public void onSubmit(AjaxRequestTarget target) {
         MyOtherPanel pnl = new MyOtherPanel(rv.newChildId())
         rv.add(pnl);
         target.prependJavaScript(String.format(
                "var item=document.createElement('%s');item.id='%s';var container = $('%s'); container.append(item,container.firstChild);",
                "div",
                pnl.getMarkupId(),
                ".dom_parent_div_id"));
         target.add(pnl);
     }
};
于 2012-10-17T05:44:09.497 回答
0

采用:

  • ListView组件来固定面板。

  • IndicatingAjaxSubmitLink将模型对象添加到您的ListView模型。

每当您添加一个对象时,只需通过 Ajax 刷新webmarkupcontainer持有的列表视图。

于 2012-10-16T22:57:25.653 回答