Apache Wicket:textarea在隐藏/显示后丢失内容

时间:2017-02-01 15:21:05

标签: java wicket wicket-1.4

我有复选框和textarea的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;
    }

}

当我在textarea中键入一些信息,然后单击复选框两次(隐藏并显示textarea)时,我输入的信息会丢失。

那么,如何在没有表单提交的情况下保存输入的信息呢?

Wicket版本1.4.20

1 个答案:

答案 0 :(得分:3)

正如@bert解释的那样,问题是textarea的内容无论如何都没有保存,并且重绘后Wicket使用服务器端的当前模型为空。

一个简单的解决方案是将new AjaxFormComponentUpdatingBehavior("onblur")添加到textarea,以便在用户移动到页面中的另一个元素时保存其内容。

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