在TextArea上的setEnable之后,Wicket文本输入消失

时间:2014-09-09 16:54:25

标签: java ajax apache wicket

我有一个TextArea,以及一个关联的CheckBox来禁用和启用TextArea(setEnabled(Boolean)),用于判断它是否是必填字段。

我的问题是,Wicket在禁用时不会将文本保留在TextArea中(setEnabled(false))。它清除了输入。

如何在调用setEnabled之前将值保留在TextArea中?我需要更新Model serverside, 我可以执行AJAX请求来更新它吗?我还没有找到任何例子。

checkBox.add(new AjaxFormComponentUpdatingBehavior("onchange") {
    @Override
    protected void onUpdate(AjaxRequestTarget target) {

       if (textField.isEnabled()) {
            textField.inputChanged();
            // Update text input in PropertyModel….
        }

        textField.setEnabled(false); // This change in state does not include text that have been typed in
        tekstFelt.setRequired(false);

        target.add(textField);
    }
});

1 个答案:

答案 0 :(得分:4)

您必须将AjaxFormComponentUpdatingBehavior事件的blur添加到TextArea,这样当您输入textarea并离开textarea(失去焦点=模糊)时,您键入的内容将是坚持模特。示例代码:

private TextArea textarea() {
    TextArea textarea = new TextArea("textarea", new PropertyModel<String>(this, "value")){

        @Override
        protected void onConfigure() {
            setEnabled(condition());
        }

    };
    textarea.setOutputMarkupId(true);
    textarea.add(new AjaxFormComponentUpdatingBehavior("blur") {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
        }
    });
    return textarea;
}

我还建议您启用或不启用textarea,您应该在textarea的onConfigure()中设置。当您想要更新textarea时,只需将其添加到AjaxRequestTarget,textarea就知道是否应该启用它。这是一种最佳做法,与您的问题没有直接关系。