Индекс элемента динамического списка с Spring Form - PullRequest
4 голосов
/ 16 мая 2011

Для оформленных неупорядоченных списков, таких как:

private List<MyListItem> items = LazyList.decorate(new ArrayList(),
        FactoryUtils.instantiateFactory(MyListItem.class));

Обязательно ли указывать атрибуты в форме с помощью индекса? такие как:

<form:input path="items[1]" />
<form:input path="items[2]" />

Почему я не могу указать две скобки, как в PHP?

item[]

Потому что при динамическом создании списка ввода с DOM было бы проблемой иметь дело с удалением элементов ...

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Так же, как вы спрашиваете, почему Spring не поддерживает шаблон общего вида, такой как item [] , вы также можете спросить, почему ваша коллекция не упорядочена в соответствии с порядком элементов, показанным форма. Помните: java.util.List - это упорядоченная коллекция , поэтому вы должны указать Spring, где должен быть вставлен каждый элемент в списке.

Обход

1º опция

Создать список автозаполнения следующим образом

private List<Item> items = new AutoPopulatingList(
    new ElementFactory() {
        public Object createElement(int index) throws ElementInstantiationException {
             /**
               * Any removed item will be handled as null. 
               * So we just remove any nullable item before adding to our List
               * By using the following statement
               */
             items.removeAll(Collections.singletonList(null));

             return new Item();
        }
    });

2º опция

Поскольку Spring имеет открытый исходный код, вы можете создать пользовательский BeanWrapperImpl . За кулисами BeanWrapperImpl отвечает за заполнение вашего компонента. Далее скомпилируйте ваш собственный Spring MVC

0 голосов
/ 02 января 2012

Вы можете получить доступ к своим переменным, как:

<form:input path="${item[0]}" />
<form:input path="${item[1]}" />

Другой способ:

<c:forEach items="${items}" var="item">
    <form:input path="${item}" />
</c:forEach>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...