如何让AjaxEditableLabel显示TextField?

时间:2011-06-10 07:50:59

标签: java ajax wicket

我有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;
    }
};

1 个答案:

答案 0 :(得分:4)

如果查看AjaxEditableLabel,它有两种用于初始化编辑器/标签的方法:newEditornewLabel。默认情况下,在newEditor方法中,它将编辑器设置为不可见。覆盖这两种方法并添加自定义逻辑以根据模型值显示组件应该可以达到您想要的效果。