Массив отправки весеннего веб-потока с новыми элементами

Я пытаюсь отправить массив с новыми элементами, используя spring webflow. Например, если myList имеет размер 3, а затем я добавляю 4-й элемент, то отправка завершается ошибкой.

<c:forEach items="${myList}" var="item" varStatus="status">
  <tr>
    <td>
       <input type="number" readonly class="form-control" value="${item.a}" name="myList[${status.index}].a"/>
    </td>
    <td>
      <input type="number" class="form-control" value="${item.b}" name="myList[${status.index}].b"/>
    </td>
    <td class="text-center">
      <i class="fa fa-trash delete" data-link="${flowExecutionUrl}&_eventId=deleteItem&itemId=${item.id}"></i>
    </td>
  </tr>
</c:forEach> 

<tr>
  <td>
    <input type="number" readonly class="form-control" value="1234" name="myList[3].a"/>
  </td>
  <td>
    <input type="number" class="form-control" value="5678" name="myList[3].b"/>
  </td>
  <td class="text-center">
    <i class="fa fa-trash delete"></i>
  </td>
</tr>

Итак, как отправить такую ​​форму?


person user3714967    schedule 18.06.2015    source источник


Ответы (1)


потому что ArrayList, который вы предоставляете связывателю данных, имеет предопределенный фиксированный размер и не может принимать новые записи.

Вам нужно обернуть свой ArrayList с помощью AutoPopulatingList (расположенного в spring-core.jar), прежде чем пытаться добавить какие-либо новые записи в связыватель данных в ваших потоках.... (или просто используйте AutoPopulatingList в вашем pojo, чтобы избежать метода оболочки) .

Пример метода преобразования:

import org.springframework.util.AutoPopulatingList;

//определение класса пропущено

        public <T> List<T> wrapListWithAutoPopulatingList(List<T> list, Class<?> pojoClazz)  {

            List<T> apl = new AutoPopulatingList(list, pojoClazz ) ;
            return apl;
        }

Документация по Java:

Класс-оболочка Simple List, который позволяет автоматически заполнять элементы по мере их запроса. Это особенно полезно для привязки данных к спискам, позволяя создавать элементы и добавлять их в список «как раз вовремя».

Примечание. Этот класс не является потокобезопасным. Для создания потокобезопасной версии используйте методы утилиты java.util.Collections.synchronizedList.

Вдохновленный LazyList из коллекций Commons.

Также обратите внимание на свойство autoGrowCollectionLimit в initBinder. Максимальное значение по умолчанию — 256 записей. Это можно отрегулировать, если вам нужно больше (или меньше). Видеть

Невозможно опубликовать форму со многими (более 256) значения

person Selwyn    schedule 18.06.2015
comment
куда мы должны добавить этот метод wrapListWithAutoPopulatingList? - person Aliy; 02.08.2019