我有一个 TextArea 和一个关联的复选框,用于禁用和启用 TextArea (setEnabled(Boolean)),用于决定它是否是必填字段。
我的问题是,Wicket 在禁用时不会将文本保留在 TextArea 中(setEnabled(false))。它清除输入。
在调用 setEnabled 之前如何将值保留在 TextArea 中?我需要更新模型服务器端, 我可以发出 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);
}
});
最佳答案
您必须将 blur
事件的 AjaxFormComponentUpdatingBehavior
添加到 TextArea
中,以便在您输入文本区域并离开文本区域时(丢失focus = Blur)您输入的内容将被模型保留。示例代码:
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;
}
我还建议无论文本区域是否启用,您都应该在文本区域的 onConfigure()
中设置。当您想要更新文本区域时,只需将其添加到 AjaxRequestTarget 中,文本区域就会知道是否应该启用它。这是最佳实践,与您的问题没有直接关系。
关于java - 在 TextArea 上 setEnable 后,Wicket 文本输入消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25750089/