Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何克隆Wicket组件并保留它';s配置,但正在更改它';身份证_Java_Components_Wicket - Fatal编程技术网

Java 如何克隆Wicket组件并保留它';s配置,但正在更改它';身份证

Java 如何克隆Wicket组件并保留它';s配置,但正在更改它';身份证,java,components,wicket,Java,Components,Wicket,我最近开始在一个协作java项目中与ApacheWicket合作,该项目已经使用Wicket一段时间了。我目前有以下问题: 我有一种方法,可以接收组件列表,由于一些项目要求,我不能更改它们的源生成器 private List<Component> createNewComponents(List<Component> components) { // create new list of components with different IDs and some oth

我最近开始在一个协作java项目中与ApacheWicket合作,该项目已经使用Wicket一段时间了。我目前有以下问题:

我有一种方法,可以接收组件列表,由于一些项目要求,我不能更改它们的源生成器

private List<Component> createNewComponents(List<Component> components) {
// create new list of components with different IDs and some other logic
}
private List createNewcomComponents(列出组件){
//创建具有不同ID和一些其他逻辑的组件的新列表
}
我需要克隆收到的每个组件以创建一组新的组件,但ID不同。我知道我不能更改组件的ID,这就是为什么我试图以某种方式克隆或复制组件参数,尽管我还没有成功

有人知道这是否可能吗?如果是这样,实现这一目标的最佳方式是什么


非常感谢您的时间。

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


您可以通过获取的组件类,以便您可以尝试使用这些东西创建具有不同id的新组件。但我认为这是一个非常糟糕的设计

没有官方支持的方法可以做到这一点。您可以使用反射进行设置,但如果您不知道如何进行设置,请不要:)

但是,您可以使用
RepeatingView
添加未知组件:

add(new RepeatingView("unknownComponents")
    .add(new Label("foo", "Foo"))
    .add(new Label("bar", "Bar")));

<div wicket:id="unknownComponents"></div>
add(新的RepeatingView(“未知组件”)
添加(新标签(“foo”、“foo”))
.添加(新标签(“酒吧”、“酒吧”));
产生

<div id="foo1">Foo</div><div id="bar2">Bar</div>
FooBar

只要添加到
RepeatingView
的组件具有不同的ID,并且所有组件都使用相同的HTML标记,它就可以工作。但是我认为您可以使用多个
repeatingview
来克服这些限制。

您好。我决定创建一个可关闭的面板,并将需要接收的任何面板设置为该面板的扩展。clone()方法使用visitChildren()和自定义IVisitor,以及每个面板组件(getModel和getBehaviors)引用的方法。我能够想出一个有效的方法,但最终我们不得不完全改变应用程序逻辑。无论如何,谢谢你的帮助。