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

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

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
Другие вопросы по тегам