我有AjaxEditableLabel
AjaxEditableLabel<String> task = new AjaxEditableLabel<String>("task", new PropertyModel<String>(getModel(), "task"));
现在我要做的是在某种情况下AjaxEditableLabel
将呈现为TextField
。默认情况下,它呈现为Label
。假设模型String
任务为空或空白,AjaxEditableLabel
将为TextField
,否则它将为Label
。
有可能吗?
感谢。
编辑:
AjaxEditableLabel<String> task = new AjaxEditableLabel<String>("task", new PropertyModel<String>(getModel(), "task")) {
private static final long serialVersionUID = 40L;
private TextField<String> editor;
protected FormComponent<String> newEditor(MarkupContainer parent, String componentId, IModel<String> model) {
editor = (TextField<String>) super.newEditor(parent, componentId, model);
Object modelObject = getDefaultModelObject();
if (modelObject == null || "".equals(modelObject)) {
editor.setVisible(true);
} else {
editor.setVisible(false);
}
return editor;
}
protected WebComponent newLabel(MarkupContainer parent, String componentId, IModel<String> model) {
Label label = (Label) super.newLabel(parent, componentId, model);
if (editor.isVisible()) {
label.setVisible(false);
}
return label;
}
};
答案 0 :(得分:4)
如果查看AjaxEditableLabel
,它有两种用于初始化编辑器/标签的方法:newEditor
和newLabel
。默认情况下,在newEditor
方法中,它将编辑器设置为不可见。覆盖这两种方法并添加自定义逻辑以根据模型值显示组件应该可以达到您想要的效果。