Java ApacheWicket:textarea在隐藏/显示后丢失内容

Java ApacheWicket:textarea在隐藏/显示后丢失内容,java,wicket,wicket-1.4,Java,Wicket,Wicket 1.4,我有带复选框和文本区域的wicket表单。 当复选框值更改时,我需要隐藏和显示textarea 这是我的实现: private class EditCommentForm extends Form { private TextArea applyToAllArea; private boolean addToAll; // some code here public EditCommentForm(String id) { super(id)

我有带复选框和文本区域的wicket表单。 当复选框值更改时,我需要隐藏和显示textarea

这是我的实现:

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

}
私有类EditCommentForm扩展了表单{
私人文本区applyToAllArea;
私有布尔addToAll;
//这里有一些代码
公共EditCommentForm(字符串id){
超级(id);
applyToAllArea=新文本区域(“applyToAllArea”,型号:“”);
applyToAllArea.setVisible(addToAll);
applyToAllArea.setOutputMarkupId(真);
applyToAllArea.setOutputMarkupPlaceholderTag(真);
添加(applyToAllArea);
CheckBox addToAll CheckBox=new AjaxCheckBox(“addToAll”、new PropertyModel(此“addToAll”)){
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
applyToAllArea.setVisible(addToAll);
target.addComponent(applyToAllArea);
}
};
addToAllCheckbox.setVisible(documents.size()>1);
添加(addToAllCheckbox);
//这里有一些代码
}
私有布尔值isAddToAll(){
返回addToAll;
}
}
当我在textarea中键入一些信息,然后单击复选框两次(隐藏和显示textarea)时,我键入的信息将丢失

那么,如何在不提交表单的情况下保存键入的信息


Wicket 1.4.20版

正如@bert所解释的,问题在于文本区域的内容无论如何都不会保存,重新绘制后,Wicket在服务器端使用的是当前的空模型

一个简单的解决方案是将
新的AjaxFormComponentUpdateingBehavior(“onblur”)
添加到文本区域,以便在用户移动到页面中的另一个元素时保存其内容


我建议您至少升级到1.4.22。与1.4.20相比,它几乎没有与安全相关的修复。

正如@bert所解释的,问题是文本区域的内容无论如何都不会保存,并且在重新绘制Wicket之后,它在服务器端使用了当前的空模型

一个简单的解决方案是将
新的AjaxFormComponentUpdateingBehavior(“onblur”)
添加到文本区域,以便在用户移动到页面中的另一个元素时保存其内容


我建议您至少升级到1.4.22。与1.4.20相比,它几乎没有与安全相关的修复。

applyToAllArea.setVisible(addToAll)')将使它在Ajax调用后不再是dom的一部分。因此,任何输入都将丢失。您需要提交并将值存储在组件中。Wicket 1.4?真的吗?@bert谢谢你的评论´´´´´´´applyToAllArea.setVisible(addToAll)´´´´´´´将使它在Ajax调用之后,文本区域不再是dom的一部分。因此,任何输入都将丢失。您需要提交并将值存储在组件中。Wicket 1.4?真的吗?@bert谢谢你的评论你能更新你的答案吗?行为应该是:新的AjaxFormComponentUpdateingBehavior(“onblur”)哦,对了!您使用1.4.x。从6.0.0开始,它只是
blur
@matrin-g好的:)谢谢!你能更新你的答案吗?行为应该是:新的AjaxFormComponentUpdateingBehavior(“onblur”)哦,对了!您使用1.4.x。从6.0.0开始,它只是
blur
@matrin-g好的:)谢谢!