Apache Wicket:文本区域在隐藏/显示后丢失内容



我有带有复选框和文本区域的检票口形式。当复选框值更改时,我需要隐藏和显示文本区域。

这是我的实现:

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

当我在文本区域中键入一些信息,然后单击复选框两次(隐藏和显示文本区域)时,我键入的信息丢失。

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

检票口版本 1.4.20

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

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

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

相关内容

  • 没有找到相关文章

最新更新