java - 模型的 Wicket 复杂数据类

标签 java wicket

我是使用 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/

相关文章:

java - 使用 Wicket 无状态页面时,Bean 未正确注入(inject)另一个 Bean

java - 游戏循环期间无法绘制到 JPanel

java - Android Studio - 应用程序编译,但不会运行。查看错误

java - 使用哪个程序将 Java 输出捕获为视频

java - 解锁锁定的 Activity 目录帐户

java - 取消设置 ajaxcheckbox 时, ListView 中的 wicket 文本区域会被清除

java - 当组件有 wicket :id? 时如何输出类标签

java - 如何在 Java Selenium 中使用通配符条目进行搜索

java - Wicket:为 byte[] 创建 IResourceStream

java - Wicket DropDownChoice 中的分隔符