Изменения формы калитки удалены при обновлении ajax - PullRequest
0 голосов
/ 25 июня 2018

У меня довольно большая и сложная форма, которая содержит много компонентов формы.

В одном из раскрывающихся полей я добавил 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 Ответ

0 голосов
/ 25 июня 2018
  1. Вы можете использовать AjaxFormComponentUpdatingBehavior / AjaxFormChoiceComponentUpdatingBehavior во всех других компонентах формы (выбора), чтобы они обновляли объект модели формы при изменении.

  2. Вы можете использовать Component # visitChildren () и динамически решать, какие именно компоненты формы добавить в AjaxRequestTarget, если это легко решить. Даже AjaxRequestTarget имеет метод #addChildren(), но он не настолько гибок, чтобы фильтровать дочерние компоненты.

...