我有一个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);
}
});
答案 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就知道是否应该启用它。这是一种最佳做法,与您的问题没有直接关系。