Удаление элемента из индексированного свойства — вопрос о JavaBeans

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


person Marcus    schedule 31.08.2010    source источник
comment
Не могли бы вы поделиться некоторым кодом (ваш jsp и ваш метод действия для удаления)?   -  person CoolBeans    schedule 31.08.2010


Ответы (1)


  • Убедитесь, что ваша форма относится к области запроса, а не к области сеанса.
  • Используйте 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
person Thierry-Dimitri Roy    schedule 31.08.2010