如何克隆Wicket组件,保留其配置,但更改其ID

时间:2014-05-09 16:17:19

标签: java components wicket

我最近开始在一个已经使用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以及我尝试以某种方式克隆或复制组件参数的原因,尽管我还没有成功。

有人知道这是否可行?如果是这样,那么实现这一目标的最佳途径是什么?

非常感谢你的时间。

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式获取组件的模型和行为:

getModel()

getBehaviors()

您可以通过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来解决这些限制。