如何解决将模型传递给子组件
假设我有以下设置。
public class TextPanel extends Panel {
public TextPanel(String id) {
this(id,null);
}
public TextPanel(String id,IModel<?> model) {
super(id,model);
add(new Label("text",model));
}
}
保持标签模型最新的最佳方法是什么。我能想到两种方法,但我不确定是否有任何缺点或更好的方法。
覆盖 onModelChanged
并调用 get("text").setDefaultModel(getDefaultModel())
或实现(新的?)模型。
public class DefaultComponentModel implements IModel<Object> {
private final Component component;
public DefaultComponentModel(Component component) {
this.component = component;
}
@Override
public Object getobject() {
return component.getDefaultModelObject();
}
public void setobject(Object object) {
component.setDefaultModelObject(object);
}
}
并将其用于标签。 (new Label("text",new DefaultComponentModel(this))
)
重要的是,当组件的 defaultModel 更改或使用 CompoundPropertyModel 时,该解决方案应该有效。
解决方法
我会将 this(id,null);
替换为 this(id,Model.of(""));
。通过这种方式,您可以更新 TextPanel 的模型对象(例如 textPanel.setModelObject("new text")
),这将自动更新标签。
如果您设置了一个新模型(即 textPanel.setModel(newModel)
,那么您必须覆盖 TextPanel#setModel() 方法并调用 get("text").setModel(newModel)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。