Apache Wicket:文本区域在 hide/show 后丢失内容
Apache Wicket: textarea lose content after hide/show
我有带有复选框和文本区域的检票口表单。
我需要在复选框值更改时隐藏和显示文本区域。
这是我的实现:
private class EditCommentForm extends Form {
private TextArea applyToAllArea;
private boolean addToAll;
// some code here
public EditCommentForm(String id) {
super(id);
applyToAllArea = new TextArea<>("applyToAllArea", Model.of(""));
applyToAllArea.setVisible(addToAll);
applyToAllArea.setOutputMarkupId(true);
applyToAllArea.setOutputMarkupPlaceholderTag(true);
add(applyToAllArea);
CheckBox addToAllCheckbox = new AjaxCheckBox("addToAll", new PropertyModel<>(this, "addToAll")) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
applyToAllArea.setVisible(addToAll);
target.addComponent(applyToAllArea);
}
};
addToAllCheckbox.setVisible(documents.size() > 1);
add(addToAllCheckbox);
// some code here
}
private boolean isAddToAll() {
return addToAll;
}
}
当我在 textarea 中输入一些信息然后点击复选框两次(隐藏和显示 textarea)时,我输入的信息丢失了。
那么,如何在不提交表单的情况下保存输入的信息?
Wicket 版本 1.4.20
正如@bert 所解释的那样,问题是文本区域的内容无论如何都不会保存,重绘后 Wicket 使用服务器端的当前模型,该模型是空的。
一个简单的解决方案是将 new AjaxFormComponentUpdatingBehavior("onblur")
添加到文本区域,以便在用户移动到页面中的另一个元素时保存其内容。
我建议您至少升级到 1.4.22。与 1.4.20 相比,它几乎没有安全相关的修复。
我有带有复选框和文本区域的检票口表单。 我需要在复选框值更改时隐藏和显示文本区域。
这是我的实现:
private class EditCommentForm extends Form {
private TextArea applyToAllArea;
private boolean addToAll;
// some code here
public EditCommentForm(String id) {
super(id);
applyToAllArea = new TextArea<>("applyToAllArea", Model.of(""));
applyToAllArea.setVisible(addToAll);
applyToAllArea.setOutputMarkupId(true);
applyToAllArea.setOutputMarkupPlaceholderTag(true);
add(applyToAllArea);
CheckBox addToAllCheckbox = new AjaxCheckBox("addToAll", new PropertyModel<>(this, "addToAll")) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
applyToAllArea.setVisible(addToAll);
target.addComponent(applyToAllArea);
}
};
addToAllCheckbox.setVisible(documents.size() > 1);
add(addToAllCheckbox);
// some code here
}
private boolean isAddToAll() {
return addToAll;
}
}
当我在 textarea 中输入一些信息然后点击复选框两次(隐藏和显示 textarea)时,我输入的信息丢失了。
那么,如何在不提交表单的情况下保存输入的信息?
Wicket 版本 1.4.20
正如@bert 所解释的那样,问题是文本区域的内容无论如何都不会保存,重绘后 Wicket 使用服务器端的当前模型,该模型是空的。
一个简单的解决方案是将 new AjaxFormComponentUpdatingBehavior("onblur")
添加到文本区域,以便在用户移动到页面中的另一个元素时保存其内容。
我建议您至少升级到 1.4.22。与 1.4.20 相比,它几乎没有安全相关的修复。