我是使用 Wicket 的初学者,我想我刚刚理解了模型的工作原理,这很好,但我的理解中有一个漏洞:
当使用自定义复杂类型的模型时,假设Person
,那么我将创建一个具有适当字段和 getter/setter 的 PersonData
类,然后创建一个 PersonModel
,它实现此 PersonData
类的模型,因此自然地,我将拥有一个类型为 PersonData
的字段。
现在问题:
在为模型实现 setObject(Person newObject)
方法时,是否更愿意复制参数对象的字段,例如 this.object.setFirstname(newObject.getFirstname( ))
,或者我可以直接复制参数实例吗,例如 this.object = newObject;
?
对于后者,我当然复制这个实例的引用,所以如果我设置这个实例的一些其他模型并对其进行一些更改,那么所有其他模型也会改变,这可能是不可取的,这就是为什么问题出现了。
在这种情况下更好的做法是什么?
最佳答案
您不需要创建 PersonData 类,使用带有泛型的 IModel 接口(interface)就足够了:
IModel<Person> personModel = Model.of(person);
它将返回模型的类型化实例。 然后,您的模型不会保存原始对象的副本,而是保存原始人物对象本身的引用,这也是在 wicket 中使用模型的推荐方式。
这个模型可以在所有组件中使用。还建议使用PropertyModels 或CompoundPropertyModels 来访问模型对象的各个字段。这避免了为每个组件单独创建模型。
关于java - 模型的 Wicket 复杂数据类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45918005/