我最近开始在一个已经使用Wicket一段时间的协作java项目中使用Apache Wicket。我目前有以下问题:
我有一种方法可以收到组件列表,由于某些项目要求,我无法更改其源代码生成器。
private List<Component> createNewComponents(List<Component> components) {
// create new list of components with different IDs and some other logic
}
我需要克隆我收到的每个组件,以创建一组新的组件,但具有不同的ID。我知道我无法更改组件的ID以及我尝试以某种方式克隆或复制组件参数的原因,尽管我还没有成功。
有人知道这是否可行?如果是这样,那么实现这一目标的最佳途径是什么?
非常感谢你的时间。
答案 0 :(得分:1)
您可以通过以下方式获取组件的模型和行为:
您可以通过getClass()
获取的Component类,这样您就可以尝试使用不同的id创建新的组件。但imho这是非常糟糕的设计。
答案 1 :(得分:1)
没有正式的,受支持的方式来做到这一点。你可以使用反射来设置它,但是如果你不知道如何去做,那就不要:)
但是,您可以使用RepeatingView
添加未知组件:
add(new RepeatingView("unknownComponents")
.add(new Label("foo", "Foo"))
.add(new Label("bar", "Bar")));
<div wicket:id="unknownComponents"></div>
产生
<div id="foo1">Foo</div><div id="bar2">Bar</div>
只要您添加到RepeatingView
的组件具有不同的ID,并且所有组件都使用相同的HTML标记,它就会起作用。但我认为您可以使用多个RepeatingViews
来解决这些限制。