Spring Boot Checkbox Array не работает должным образом - PullRequest
4 голосов
/ 21 июня 2019

У меня есть массив флажков с одинаковыми именами, которые я отправляю в Spring Boot Controller.Я создаю Bootstrap DataTable, используя Jquery / Ajax, используя данные, которые получают из базы данных, и проверяю, должен ли я установить флажок при загрузке страницы.Я делаю это с помощью этого кода:

if (data['isChecked'] == "1") {
   return "<input type='checkbox' name='fieldIdList' value='1_' checked>";
} else {
   return "<input type='checkbox' name='fieldIdList' value='1_'>";
}

Этот код повторяется, поэтому следующее значение флажка будет 2_, а затем 3_ и т. Д. И т. Д.

Когда страница загружает таблицуотображает 10 строк, и мои первые 2 флажка отображаются как выбранные.Это правильно.

Теперь, когда я отправляю эту форму без изменения состояния каких-либо флажков для моего кода контроллера ниже:

@RequestMapping(value = "/admin/dataTable", method = RequestMethod.POST)
public String postDataTable(@RequestParam("fieldIdList") List<String> fieldIdList){
    return "";
}

Я получаю 2 записи в моем fieldIdList:

"1 _"

"2 _"

Это правильно, потому что были отмечены только мои первые 2 флажка.Но когда я снимаю флажки и отправляю снова, я получаю забавный результат.В приведенном ниже примере я снял флажок 2-й и затем снова отправил форму, мои записи в моем fieldIdList:

"1 _"

"1 _"

"1_"

"2 _"

Сняв флажок со второго флажка и отправив, я заподозрил, что получу только 1 запись в моем fieldIdList как "1 _"

Также после отправки страницыперенаправляется на предыдущую страницу, поэтому при повторном входе на эту страницу все списки загружаются как новые, поэтому в них не может быть сохранено никаких предыдущих значений.

Не уверен, что это Jquery / Ajaxпроблема или проблема Java или просто проблема с объектом между креслом и ноутбуком:)

Поскольку DataTable разбивается на страницы, мне пришлось добавить этот фрагмент кода ниже, чтобы получить все строки DataTable.Не уверен, если это вызывает проблему.

    // Handle form submission event
    $('#manageFormFields').on('submit', function (e) {
        var dataTable = $('#formFieldsDataTable').DataTable();
        var form = this;

        // Iterate over all checkboxes in the table
        var tableData = dataTable.$('input, select').serializeArray();
        $(form).append(tableData);
        $.each(tableData, function () {
            // If element doesn't exist in DOM
            if (!$.contains(document, form[this.name])) {
                // Create a hidden element
                $(form).append(
                    $('<input>')
                        .attr('type', 'hidden')
                        .attr('name', this.name)
                        .val(this.value)
                );
            }
        });
    });

Сгенерированный HTML:

enter image description here

Спасибо за ваше время.

1 Ответ

0 голосов
/ 21 июня 2019

Мне очень жаль тратить ваше время. Оказывается, я дважды добавлял список строк в Datatable. Таким образом, было 2 поля с одинаковым именем и значением. Когда я снимаю флажок с одного, другой все еще присутствует, и именно поэтому контроллер все еще поднял его.

Я не смог увидеть это в выводе HTML, потому что источник показывает только то, что видно на экране (первые 10 строк).

Поэтому, когда я пролистал все строки, я заметил, что был установлен другой флажок, а затем увидел, что я добавил строки дважды.

Удаление дубликатов решило мою проблему.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...