gpt4 book ai didi

java - ajax 更新中删除了 Wicket 表单更改

转载 作者:行者123 更新时间:2023-12-01 19:52:09 24 4
gpt4 key购买 nike

我有一个相当大且复杂的表单,其中包含许多表单组件。

在其中一个下拉字段中,我添加了一个 AjaxFormComponentUpdatingBehavior 来处理下拉列表中的更改。基于这些更改,我正在更新表单中的一些其他字段,如下所示:

masterFooDropDown.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
String value = (String) getFormComponent().getModelObject();
if (value != null) {
for (Foo foo: form.getModelObject().getFoos()) {
foo.setValue(value);
}

target.add(form);
}
}
});

Foo 字段会使用下拉列表中的值正确更新。

问题是表单中其他文本字段中的任何更改都会被删除。我知道会发生这种情况,因为它们尚未在模型中更新。

我该如何解决这个问题?我可以将目前为止在表单中填写的所有数据以某种方式写入模型(无需提交表单)吗?

我需要将整个表单添加到ajax方法中的目标,因为应更新的字段是表单模型对象的子级并动态添加到表单中。例如,我无法执行 target.add(fooFieldX) 因为可能有任意数量的“fooFields”。

最佳答案

  1. 您可以在所有其他表单(选择)组件上使用 AjaxFormComponentUpdatingBehavior/AjaxFormChoiceComponentUpdatingBehavior,以便它们在修改时更新表单的模型对象。

  2. 您可以使用 Component#visitChildren() 并动态决定将哪些特定表单组件添加到 AjaxRequestTarget(如果很容易决定的话)。即使 AjaxRequestTarget 也有方法 #addChildren() 但过滤子组件并不那么灵活。

关于java - ajax 更新中删除了 Wicket 表单更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51021463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com