哪种方法更好?:
add(new Label("label", new PropertyModel<String>(cat, "name")));
或
add(new Label("label", cat.getName()));
我试图找到有关比较的任何信息..但找不到任何东西 我如何理解第一种方法是读/写逻辑,第二种方法是只读逻辑,(如果我不对,请写我)。但对于只读逻辑哪个更好?
答案 0 :(得分:5)
这个版本比你给出的两个选项中的更好:
add(new Label("label", new PropertyModel(cat, "name")));
如果在猫名称更改后稍后重新绘制页面,它允许更新页面上呈现的值。
第二个选项只显示猫的名字,就像创建Label
时一样。如果猫的名字改变,它永远不会改变。
对于使用PropertyModel
的危险,有一些事情要说。这是“字符串”编程。您的编译器无法帮助您验证属性名称“name”的正确性。如果您稍后重构代码并将属性的名称更改为“firstName”,则您必须手动查找引用旧属性名称的所有位置并手动更改它们。
答案 1 :(得分:5)
它们在功能上有所不同。
第一个说:每当重新渲染此组件时,刷新值。第二个说:显示创建时的值。
你需要哪一个?如果你想要一个动态刷新的标签,你别无选择,它是PropertyModel
或CompoundPropertyModel
(见后面)。
如果您希望它保持不变,即使基础对象发生变化,您也无法使用PropertyModel
。
但是,如果您完全确定cat.getName()
永远不会改变,因此这两个版本的行为方式相同,我个人不会使用PropertyModel
有三个原因:
PropertyModel
将会中断。cat.getName()
放在那里,您可以在IDE中“点击”,您的标签将显示在搜索getName()
方法的所有调用中,依此类推。 如果你有很多组件引用同一个对象的字段,你可以考虑使用CompoundPropertyModel
,虽然它仍然遇到问题1和2,但是让你的代码看起来更清晰。
如果您有三个或更少的组件,但您不需要动态模型,请使用无模型格式。