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