Wicket渲染后,在网页中添加其他组件

时间:2012-10-16 19:54:04

标签: java wicket wicket-1.5

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

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

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

这里的不同之处在于组件(面板)的数量最初是未知的。我不确定如何通过Wicket实现这一目标。

2 个答案:

答案 0 :(得分: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);
     }
};

答案 1 :(得分:0)

使用:

  • ListView组件来保存面板。

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

无论何时添加对象,只需通过Ajax刷新保存listview的webmarkupcontainer