为了说明我的问题,假设我有一个Thing实例,它有两个文本属性 - 'foo'和'bar'。
我想创建一个Panel来编辑Thing的实例。该面板有两个TextField组件,一个用于'foo'属性,另一个用于'bar'属性。
我希望能够使用setDefaultModel()
的实例在我的Panel上调用IModel<Thing>
,并且TextField组件可以引用此模型。如何最好地实现这一目标?
我是否应该覆盖Panel.setDefaultModel()
方法以在两个TextField组件上调用setModel()?或者也许为TextField组件创建匿名的ReadOnlyModels,重写getObject()
方法以从包含Panel的模型中检索对象?
这些对我来说都不是很优雅,所以我想知道是否有更好的方法?
答案 0 :(得分:3)
您可以使用PropertyModel
作为textFields。将IModel<Thing>
传递给PropertyModel
的构造函数,其中foo
作为属性名称:
add(new TextField("fooFieldId", new PropertyModel(thingModel, "foo")));
PropertyModel
会发现thingModel是Model
并且调用getObject().getFoo()
等。
这假定IModel<Thing>
实例没有改变,只有可以改变的底层对象调用setDefaultModelObject
。
答案 1 :(得分:0)
也许我只是忽略了这一点,但我在1.4和1.5的JavaDocs中找不到Panel.setModel()
。如果你实现了它可能你可以改变它而不是替换模型对象而是调用model.setObject()
而不是?
免责声明:现在无法真正检查,导致工作中没有检票口,而且我的家用机器早些时候出现了视频卡故障......
答案 2 :(得分:0)
也许这会有所帮助?
public abstract class AbstractWrapModel<T> extends Object implements IWrapModel<T>
IWrapModel对象的简单基类。
请参阅IComponentAssignedModel或IComponentInheritedModel,以便在包装器中不使用时不必使用detach或setObject()等空方法。 detach方法调用包装的模型分离。