为了说明我的问题,假设我有一个Thing的实例,它有两个文本属性 – ‘foo’和’bar’.
我想创建一个Panel来编辑Thing的实例.该面板有两个TextField组件,一个用于’foo’属性,另一个用于’bar’属性.
我希望能够在我的Panel上使用IModel< Thing>的实例调用setDefaultModel().并为TextField组件引用此模型.如何最好地实现这一目标?
我是否应该覆盖Panel.setDefaultModel()方法以在两个TextField组件上调用setModel()?或者可能为TextField组件创建匿名的ReadOnlyModels,重写getObject()方法以从包含Panel的模型中检索对象?
这些对我来说都不是很优雅,所以我想知道是否有更好的方法?
解决方法:
您可以将PropertyModel用于textFields.通过IModel< Thing>使用foo作为属性名称进入PropertyModel的构造函数:
add(new TextField("fooFieldId", new PropertyModel(thingModel, "foo")));
PropertyModel将确定thingModel是一个Model并调用getObject().getFoo()等.
这假设IModel< Thing>实例不会更改,只能调用setDefaultModelObject来更改其底层对象.
标签:java,wicket
来源: https://codeday.me/bug/20190630/1335642.html