为了说明我的问题,假设我有一个 Thing 实例,它有两个文本属性 - 'foo' 和 'bar'。
我想创建一个面板来编辑事物的实例。该面板有两个 TextField 组件,一个用于“foo”属性,一个用于“bar”属性。
我希望能够调用 setDefaultModel()
在我的面板上有一个 IModel<Thing>
的实例并让 TextField 组件引用此模型。如何最好地实现这一目标?
我应该覆盖 Panel.setDefaultModel()
吗?在两个 TextField 组件上也调用 setModel() 的方法?或者为 TextField 组件创建匿名 ReadOnlyModels,覆盖 getObject()
从包含面板的模型中检索对象的方法?
我觉得这两个都不是很优雅,所以我想知道是否有更好的方法?
最佳答案
您可以使用 PropertyModel
对于文本字段。通过 IModel<Thing>
进入 PropertyModel
的构造函数与 foo
作为属性名称:
add(new TextField("fooFieldId", new PropertyModel(thingModel, "foo")));
PropertyModel
会发现 thingModel 是一个 Model
并调用getObject().getFoo()
等等
这假设 IModel<Thing>
实例不会改变,只有它的底层对象可以通过调用 setDefaultModelObject
来改变。 .
关于java - Wicket:从包含 Panel 到引用模型的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8822475/