Проблема в том, как вы настроили свою страницу. У вас есть все флажки с одинаковым именем (стандартная настройка), но у вас также есть поля upDate
и upDesc
, также настроенные с тем же именем.
Это означает, что когда вы отправляете свою форму, на сервере вы получите (учитывая ваш пример) список значений 3 upDate
, список значений 3 upDesc
и список из 3 upisActive
флажков. Ну ... не совсем!
Проблема заключается в ваших флажках и коде, который вы используете для чтения значений для обновления.
Во-первых, флажки не отправляются по запросу, если они не отмечены. Это означает, что в зависимости от вашего выбора на сервере вы получите список upisActive
значений длины 0, 1, 2 или 3.
Во-вторых, у вас есть этот код на сервере:
String[] values = request.getParameterValues("upisActive");
...
for (int i = 0; i < values.length; i++) {
...
val = values[i];
hdvo.setDate(upForm.upDate[i]);
hdvo.setDesc(upForm.upDesc[i]);
...
}
В вашем примере вы устанавливаете третий флажок и отправляете форму. Это означает, что String[] values
будет иметь длину 1, потому что только выбранный флажок отправляется на сервер. Но поля ввода всегда отправляются в 3 upDesc
и 3 upDate
.
Затем вы зацикливаете его (один раз) и извлекаете upForm.upDate[0]
и upForm.upDesc[0]
. Таким образом, вы обновите первую строку, установив третий флажок.
Другие проблемы:
1) Вы использовали тот же идентификатор в следующем коде (это вызывает проблемы):
<logic:iterate name="specialResult" id="specialResult"...
2) Вы используете классические входы и добавили к нему атрибут property
:
<input type="text" ... property="upDate" />" property="upDate" ...
3) Не уверен, что браузер гарантирует, что поля будут отправляться в точном порядке соответствия каждый раз, поэтому использование одного счетчика, я полагаю, просто «надеется» на один и тот же порядок.
4) Кроме того, прочитайте это