2012-10-16 25 views
0

我有要求使用Wicket 1.5创建网页,Wicket 1.5可呈现可变数量的面板以捕获用户输入。所有面板具有相同的结构。 页面将从一个面板开始,并包含一个按钮,以根据需要动态添加更多。在Wicket渲染后向网页添加其他组件

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

我已经做了一个类似的事情,在页面加载创建所有组件,并选择性地显示/隐藏组件。

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

回答

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); 
    } 
}; 
0

用途:

  • ListView组件支撑面板。

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

无论何时添加对象,只需刷新通过Ajax持有列表视图的webmarkupcontainer即可。