模型

时间:2017-08-28 11:33:19

标签: java wicket

我是使用Wicket的首发,我想我只是设法了解模型是如何工作的,这很棒,但我的理解中有一个漏洞:

使用模型作为自定义复杂类型时,假设为Person,然后我将使用正确的字段和getter / setter创建一个PersonData类,然后创建一个{{1} },它实现了这个PersonModel类的模型,所以我自然会有一个类型为PersonData的字段。

现在的问题是:

在为模型实现PersonData方法时,是否优先复制参数对象的字段,如setObject(Person newObject),或者我可以复制参数实例,如{{1 }}?

对于后者,我当然会复制这个实例的引用,所以如果我为这个实例设置一些其他模型并对其进行一些更改,那么所有其他模型也会改变,这可能是不可取的,这就是为什么问题出现了。

在这种情况下,更好的做法是什么?

1 个答案:

答案 0 :(得分:2)

您不需要创建PersonData类,使用带有泛型的IModel接口就足够了:

 IModel<Person> personModel = Model.of(person);

将返回模型的类型化实例。 然后,您的模型不会保留原始对象的副本,而是保留原始人对象本身的引用,这也是在wicket中使用模型的推荐方法。

然后可以在所有组件中使用此模型。还建议使用PropertyModels或CompoundPropertyModels来访问模型对象的各个字段。这样可以避免为每个组件单独创建模型。