У меня есть массив флажков с одинаковыми именами, которые я отправляю в 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:

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