Удаление элемента из индексированного свойства - вопрос JavaBeans - PullRequest
1 голос
/ 31 августа 2010

Я работаю с индексированными свойствами (используя Struts и Java / JSP). У нас есть динамическая таблица, которая может добавлять / удалять строки / элементы в таблице. Добавление строк работает по назначению - я вижу новые строки в форме в классе действия. Удаленные строки не устанавливаются (очевидно), но они также не удаляются из списка. Я реализовал методы void setItem (List), void setItem (index), Item getItem (index) и List getItem (). Я не могу найти много информации о поведении проиндексированных свойств. Есть ли способ сброса, который мне нужно реализовать, или индексированные свойства должны позаботиться о создании нового списка? Из того, что я могу сказать, устанавливаются только элементы, все еще находящиеся в списке, и они устанавливаются с помощью метода void setItem (Item).

1 Ответ

1 голос
/ 31 августа 2010
  • Убедитесь, что ваша форма относится к области запроса, а не к сессии
  • Используйте LazyList .

Например:

private List<PropertyContact> contactsList = LazyList.decorate(new ArrayList<PropertyContact>(), PropertyContact.PROPERTY_CONTACT_FACTORY);

public static final Factory PROPERTY_CONTACT_FACTORY = new Factory() {
        @Override
        public Object create() {
            return new PropertyContact();
        }
    };

Затем вы можете отобразить / отредактировать список в вашем JSP следующим образом:

<c:forEach items="${profileForm.contactsList}" var="contact" varStatus="contactSta">
    <html:hidden styleClass="contact-id" property="contactsList[${contactSta.index}].id"/>
</c:forEach>

Если вы хотите добавить элементыв список, убедитесь, что вы установили индекс выше, чем максимальный.Например, если мой список содержит 3 элемента, новый (четвертый) будет выглядеть следующим образом: (помните, что список основан на нулевом индексе)

<input style="hidden" styleClass="contact-id" property="contactsList[3].id"/>

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

contactsList.get(1) == null;//remember that list are zero-index based
...