我需要使用Wicket 1.5创建一个网页,它可以呈现可变数量的面板来捕获用户输入。所有面板都具有相同的结构。 该页面将从一个面板开始,并包含一个按钮,可根据需要动态添加更多。
因此,在最初呈现页面时,面板的数量是未知的。实际上,我会动态地改变页面的结构。这可以在Javascript中使用document.addElement()
我过去通过在页面加载时创建所有组件,并有选择地显示/隐藏组件,做了类似的事情。
这里的不同之处在于组件(面板)的数量最初是未知的。我不确定如何通过Wicket实现这一目标。
答案 0 :(得分:4)
这实际上是一个常见的用例,通常使用RepeatingView(ListView会重新绘制所有可能不是你想要的面板)。
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
。